atcoder#AGC060E. [AGC060E] Number of Cycles

[AGC060E] Number of Cycles

题目描述

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

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

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

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

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

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

输入格式

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

T T case1 case_1 case2 case_2 \vdots caseT case_T

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

N N K K P1 P_1 P2 P_2 \cdots PN P_N

输出格式

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

Yes x1 x_1 x2 x_2 \cdots xN x_N

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

题目大意

对于一个 11 ~ nn 的排列 aa ,设 f(a)f(a) 表示 aa 的环数。

给定 nn , mm 和一个排列 aa ,称一个排列 bb 是好的当且仅当它满足下列条件:

  • 设排列 cc 满足 ci=abic_{i}=a_{b_{i}} ,那么 f(b)+f(c)=mf(b)+f(c)=m

你需要构造一个好的排列 bb 或输出无解。

n2×105n\leq 2\times 10^{5}

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

提示

制約

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

Sample Explanation 1

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