任意のニ項をswapして順列を並び替えるときの最小手数
長さ$ Nの順列$ P = (P_1, P_2, \ldots, P_N)がある。
これに対して、$ 1 \le i < j \le Nなる$ (i, j)を任意に選び$ P_i, P_jを入れ替える操作を繰り返すことで、$ P_i = iにしたい。
必要な操作の最小回数を求めよ。
頂点数$ Nの有向グラフを考え、$ P_i \to iに辺を張る。
こうすると、いくつかのサイクルができる。(順列の場合)
サイクルの個数を$ Cとするとき、答えは$ N - Cとなる。
考え方
それぞれのサイクルについて、辺に沿って要素をひとつずらすと$ P_i = iになる。