AT_agc060_e [AGC060E] Number of Cycles

题目描述

在本题中,提到“顺序”时,指的是 $ (1,2,\cdots,N) $ 的一个排列。 对于一个排列 $ a=(a_1,a_2,\cdots,a_N) $,定义 $ f(a) $ 为 $ a $ 的循环节(cycle)的个数。更准确地说,$ f(a) $ 的值定义如下: - 考虑一个有 $ N $ 个顶点、编号为 $ 1 $ 到 $ N $ 的无向图。对于每个 $ 1\leq i\leq N $,在顶点 $ i $ 和顶点 $ a_i $ 之间连一条边。此时,该图的连通分量个数即为 $ f(a) $。 给定一个排列 $ P=(P_1,P_2,\cdots,P_N) $ 和一个整数 $ K $。判断是否存在一个排列 $ x $,使得下列条件成立,并在存在时构造出一个解: - 令 $ y_i=P_{x_i} $,从而得到排列 $ y $。 - 满足 $ f(x)+f(y)=K $。 对于每个输入文件,需要解答 $ T $ 个测试用例。

输入格式

输入以如下格式从标准输入读入: > $ T $ > $ case_1 $ > $ case_2 $ > $\vdots$ > $ case_T $ 每个测试用例的格式如下: > $ N $ $ K $ $ P_1 $ $ P_2 $ $ \cdots $ $ P_N $

输出格式

对于每个测试用例,如果不存在满足条件的排列 $ x $,输出 `No`。如果存在,输出如下格式的答案: > Yes $ x_1 $ $ x_2 $ $ \cdots $ $ x_N $ 输出 `Yes` 或 `No` 时,字母大小写均可。若存在多个解,输出任意一个均可。

说明/提示

### 数据范围 - $ 1\leq T\leq 10^5 $ - $ 2\leq N\leq 2\times 10^5 $ - $ 2\leq K\leq 2N $ - $ (P_1,P_2,\cdots,P_N) $ 是 $ (1,2,\cdots,N) $ 的一个排列 - 每个输入文件中所有 $ N $ 的总和不超过 $ 2\times 10^5 $ - 输入的所有数均为整数 ### 样例解释 1 在第 $ 1 $ 个测试用例中,取 $ x=(2,1,3) $,则 $ y=(3,1,2) $,此时 $ f(x)+f(y)=2+1=3 $。 由 ChatGPT 4.1 翻译