BOJ 21002 - Cactus

dp(n,k)= 노드 n개가 있는 싸이클에서 이웃한 노드끼리 동일한 색상을 갖지 않고 k개의 색을 갖고 칠할 수 있는 경우의 수라고 하자.
예외적으로 dp(1,k)=dp(2,k)=k, dp(3,k)=k⋅(k−1)⋅(k−2) 라 하자.
dp(n,k)=k⋅(k−1)n−1−dp(n−1,k) (n≥4) 이다.
왜냐면 싸이클이 아닌 일자로 된n개를 k개의 색으로 칠하는 경우의 수에서 n−1 개의 정점중 첫 정점과 마지막 정점이 같은 색인 경우의 수를 빼면 되기 때문이다.
싸이클을 찾을 때마다 그 싸이클의 정점의 수가 V라면 dp(V,k)⋅kk−1 만큼 정답에 곱해준다.
싸이클에 속하지 않은 모든 정점은 정답에 k−1 을 곱해주고, 마지막에 k−1k 를 한 번 곱해주면 된다.
트리의 시작점은 항상 k개를 고를 수 있기 때문이라고 생각하면 된다.
Comments