atcoder#AGC060E. [AGC060E] Number of Cycles

[AGC060E] Number of Cycles

配点 : 14001400

問題文

この問題では,順列と言った際には (1,2,,N)(1,2,\cdots,N) の順列を指すものとします.

順列 a=(a1,a2,,aN)a=(a_1,a_2,\cdots,a_N) に対し,f(a)f(a)aa のサイクルの個数と定義します. より正確には,f(a)f(a) の値は次のように定義されます.

  • 11 から NN までの番号のついた NN 頂点からなる無向グラフを考える. そして,各 1iN1 \leq i \leq N について,頂点 ii と頂点 aia_i 間を結ぶ辺を追加する. このときのグラフの連結成分の個数を f(a)f(a) とする.

順列 P=(P1,P2,,PN)P=(P_1,P_2,\cdots,P_N) および整数 KK が与えられます. 次の条件を満たす順列 xx が存在するかどうか判定し,存在するなら一つ構築してください.

  • yi=Pxiy_i=P_{x_i} として,順列 yy を定める.
  • この時,f(x)+f(y)=Kf(x)+f(y)=K である.

11 つの入力ファイルにつき,TT 個のテストケースを解いてください.

制約

  • 1T1051 \leq T \leq 10^5
  • 2N2×1052 \leq N \leq 2 \times 10^5
  • 2K2N2 \leq K \leq 2N
  • (P1,P2,,PN)(P_1,P_2,\cdots,P_N)(1,2,,N)(1,2,\cdots,N) の順列
  • 11 つの入力ファイルにつき,NN の総和は 2×1052 \times 10^5 を超えない
  • 入力される数はすべて整数

入力

入力は以下の形式で標準入力から与えられる.

TT

case1case_1

case2case_2

\vdots

caseTcase_T

各ケースは以下の形式で与えられる.

NN KK

P1P_1 P2P_2 \cdots PNP_N

出力

各ケースに対し,条件を満たす順列 xx が存在しない場合は No と,存在する場合は以下の形式で答えを出力せよ.

Yes

x1x_1 x2x_2 \cdots xNx_N

Yes, No を出力する際,各文字は英大文字・小文字のいずれでもよい. 解が複数存在する場合,どれを出力しても正解とみなされる.

3
3 3
1 3 2
2 2
2 1
4 8
1 2 3 4
Yes
2 1 3
No
Yes
1 2 3 4

11 つめのケースでは,x=(2,1,3)x=(2,1,3) とすれば y=(3,1,2)y=(3,1,2) となり,f(x)+f(y)=2+1=3f(x)+f(y)=2+1=3 となります.