Educational Codeforces Round 4 - E. Square Root of Permutation

問題リンク

解説

functionalグラフでかつ、 p qはpermutationなので、 p q (i , p[i]), (i, q[i])となる有向グラフを考えた時、シンプルなサイクルになることがわかる。

 i = p ^ {k} [i]となるkを考えよう。

このとき、 j = p ^ {k}[j] q[i] = jとなる jが必要なことがわかる

kが偶数のとき

 j = p ^ {k / 2}[i]とすればよい

 kが奇数のとき

 x = p ^ {k}[x]となる iの巡回サイクルとは別の xをみつける(これがないときは作れないことが証明できる)

 j = x,  q[j] = p[i]として作ることができる

となり、以上で必要性を満たさないときは必ずつくれる

提出コード

codeforces.com