yukicoder No.1392 Don't be together

yukicoder.me

 順列 P に対し, iP_i の間に辺を張ったグラフは, どの連結成分も閉路になることが知られてまふ. 連結成分ごとに, 閉路をたどるような順番で次のdpを更新しまふ.

 

dp[i][j][k] : i 番目の頂点まで調べてグループ数がちょうど j 個, そしてi 番目の頂点が現在の連結成分で最初に調べた頂点と違うグループなら k=0 , 同じなら k=1

 

閉路の最初の頂点を見るときには必ず k=1 で, サイクル内最後の頂点においては必ず k=0 ということに気を付ければあとはうまく更新できると思いまふ.

なお, 対称性より, 頂点の更新順は閉路のサイズの組合わせさえあっていれば 1,2,3,...,N という順番で更新されるものとして良いれふ.