#agc060e. [agc060_e]Number of Cycles

[agc060_e]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) 表示 aa 中的循环个数。更准确地说,f(a)f(a) 的值定义如下:

  • 考虑一个由 NN 个顶点组成的无向图,顶点编号为 11NN。对于每个 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

对于每个输入文件,解决 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) 的一个排列。
  • 在每个输入文件中,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

输出中的 YesNo 可以为大写或小写。如果存在多个解,任何一个解都可以接受。

样例输入 1

3
3 3
1 3 2
2 2
2 1
4 8
1 2 3 4

样例输出 1

Yes
2 1 3
No
Yes
1 2 3 4

在第一个测试用例中,令 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