CF1867D Cyclic Operations
题目描述
Egor 有一个长度为 $n$ 的数组 $a$,初始时所有元素均为零。但他想将其变为另一个长度为 $n$ 的数组 $b$。
由于 Egor 不喜欢走捷径,他只能使用如下操作(可以不使用,也可以多次使用):
- 选择一个长度为 $k$ 的数组 $l$($1 \leq l_i \leq n$,所有 $l_i$ 互不相同),然后将每个 $a_{l_i}$ 变为 $l_{(i\%k)+1}$($1 \leq i \leq k$)。
他想知道,是否有可能仅通过上述操作将数组 $a$ 变为数组 $b$。由于 Egor 还是个初学编程的人,他请求你帮他解决这个问题。
操作中的 $ \% $ 表示取余,即 $a\%b$ 等于 $a$ 除以 $b$ 的余数。
输入格式
输入的第一行包含一个整数 $t$($1 \leq t \leq 10^5$),表示测试用例的数量。
每个测试用例包含两行。第一行包含两个整数 $n$ 和 $k$($1 \leq k \leq n \leq 10^5$)。
第二行包含数组 $b_1, b_2, \ldots, b_n$($1 \leq b_i \leq n$)。
保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。
输出格式
对于每个测试用例,如果存在一种方法仅通过给定的操作将数组 $a$ 变为数组 $b$,输出 "YES"(不带引号);否则输出 "NO"(不带引号)。你可以使用任意大小写字母输出答案,例如 "yEs"、"yes"、"Yes" 和 "YES" 都会被判为正确答案。
说明/提示
我们来看第一个示例:
- 对 $l = [1,2,3]$ 执行操作。此时 $a = [2,3,1,0,0]$。
- 对 $l = [3,5,4]$ 执行操作。此时 $a = [2,3,5,3,4] = b$。
可以发现,能够通过操作得到数组 $b$,因此答案为 YES。对于第二个示例,可以证明无法得到数组 $b$,因此答案为 NO。
由 ChatGPT 4.1 翻译