#ATagc060e. [AGC060E] Number of Cycles(wuspj)

[AGC060E] Number of Cycles(wuspj)

题目描述

在本题中,提到“顺序”时,指的是 (1,2,,N)(1,2,\cdots,N) 的一个排列。

对于一个排列 a=(a1,a2,,aN)a=(a_1,a_2,\cdots,a_N),定义 f(a)f(a)aa 的循环节(cycle)的个数。更准确地说,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 个测试用例。

输入格式

输入以如下格式从标准输入读入:

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

输出

Yes
2 1 3
No
Yes
1 2 3 4

说明/提示

数据范围

  • 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
  • 输入的所有数均为整数

样例解释 1

在第 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

由 ChatGPT 4.1 翻译