CF1787F Inverse Transformation
题目描述
一位科学家正在研究一个自我生长的长度为 $n$ 的排列 $a_1,a_2,\ldots,a_n$。
排列每天都会变化,每一天,元素 $x$ 都会变成 $a_x$,即 $a_x$ 会变成 $a_{a_x}$。具体地:
- 第一天,排列会变成 $b$,其中 $b_x = a_{a_x}$;
- 第二天,排列会变成 $c$,其中 $c_x = b_{b_x}$;
- $\ldots$
例如,若 $a = [2,3,1]$,则第一天会变成 $[3,1,2]$,第二天会变成 $[2,3,1]$。
定义 $\sigma(x) = a_x$,定义 $f(x)$ 为最小的正整数 $m$ 满足 $\sigma^m(x) = x$,其中 $\sigma^m(x) = \underbrace{\sigma(\sigma(\ldots \sigma}_{m \text{ 个 } \sigma}(x) \ldots))$。
例如,$a = [2,3,1]$ 时,$\sigma(1) = 2$,$\sigma^2(1) = \sigma(\sigma(1)) = \sigma(2) = 3$,$\sigma^3(1) = \sigma(\sigma(\sigma(1))) = \sigma(3) = 1$,故 $f(1) = 3$。再例如 $a = [4,2,1,3]$,$\sigma(2) = 2$ 故 $f(2) = 1$;$\sigma(3) = 1$,$\sigma^2(3) = 4$,$\sigma^3(3) = 3$ 故 $f(3) = 3$。
现在给出第 $k$ 天的排列 $a'$。求找出一个初始的排列 $a$ 使得 $\sum\limits^n_{i=1} \dfrac{1}{f(i)}$ 最小。
~~因为鬼畜的 sigma 和审核争了好久~~
第二行 $n$ 个正整数 $a'_1,a'_2,\ldots,a'_n$($1 \le a'_i \le n$)表示第 $n$ 天的排列。
保证所有测试数据的 $n$ 之和不超过 $2\cdot 10^5$。
输入格式
第一行一个正整数 $t$($1\le t\le 10^4$)表示数据组数。
输出格式
对于每组测试数据,若不存在这样的初始排列 $a$ 输出 `NO`。若存在输出 `YES`,并在下一行输出 $\sum\limits^n_{i=1} \dfrac{1}{f(i)}$ 最小的一个排列,若有多个,输出任意一个即可。
### 样例解释
第二组测试数据中,初始排列可以是 $a = [6,2,5,7,1,3,4]$,它第一天会变成 $[3,2,1,4,6,5,7]$,第二天(即第 $k$ 天)会变成 $a' = [1,2,3,4,5,6,7]$。同时,所有符合这个条件的 $a$ 中,它的 $\sum\limits^n_{i=1} \dfrac{1}{f(i)}$ 最小,是 $\dfrac{1}{4}+\dfrac{1}{1}+\dfrac{1}{4}+\dfrac{1}{2}+\dfrac{1}{4}+\dfrac{1}{4}+\dfrac{1}{2}=3$。
第五组测试数据中,初始排列可能是 $a = [4,2,1,3]$,它第一天会变成 $[3,2,4,1]$,第二天变会 $[4,2,1,3]$,如此循环。所以,第八天(第 $k$ 天)它会变成 $a' = [4,2,1,3]$。同时它的 $\sum\limits^n_{i=1} \dfrac{1}{f(i)} = \dfrac{1}{3} + \dfrac{1}{1} + \dfrac{1}{3} + \dfrac{1}{3} = 2$ 最小。
说明/提示
In the second test case, the initial permutation can be $ a = [6,2,5,7,1,3,4] $ , which becomes $ [3,2,1,4,6,5,7] $ on the first day and $ a' = [1,2,3,4,5,6,7] $ on the second day (the $ k $ -th day). Also, among all the permutations satisfying that, it has the minimum $ \sum\limits^n_{i=1} \dfrac{1}{f(i)} $ , which is $ \dfrac{1}{4}+\dfrac{1}{1}+\dfrac{1}{4}+\dfrac{1}{2}+\dfrac{1}{4}+\dfrac{1}{4}+\dfrac{1}{2}=3 $ .
In the fifth test case, the initial permutation can be $ a = [4,2,1,3] $ , which becomes $ [3,2,4,1] $ on the first day, $ [4,2,1,3] $ on the second day, and so on. So it finally becomes $ a' = [4,2,1,3] $ on the $ 8 $ -th day (the $ k $ -th day). And it has the minimum $ \sum\limits^n_{i=1} \dfrac{1}{f(i)} = \dfrac{1}{3} + \dfrac{1}{1} + \dfrac{1}{3} + \dfrac{1}{3} = 2 $ .