AT_agc068_c [AGC068C] Ball Redistribution
题目描述
有 $N$ 个盒子,编号从 $1$ 到 $N$ ,有 $N$ 个球,编号从 $1$ 到 $N$ 。
你给 Snuke 布置了以下**程序**作为家庭作业。
- 将每个球放入他喜欢的任何盒子中。同一个盒子里可以放多个球,也可以有盒子里不放球。
- 按顺序对 $i = 1, 2, \cdots, N$ 进行以下操作。
- 如果盒子 $i$ 中没有球,则什么也不做。
- 否则如果盒子 $i$ 中有球,则取出所有的球,按**任意顺序**排列。假设 $k$ 是取出的球数, $(x_1, x_2, \cdots, x_k)$ 是排成一行的球的编号。对于每个 $1 \leq j \leq k$ ,将球 $x_j$ 放入盒子 $x_{j+1}$ 。这里, $x_{k+1}$ 表示 $x_1$ 。所有这些将球放入盒子的操作都是同时进行的。
Snuke 说他已经完成了作业,并向你报告了最终状态。具体地说,他说操作完成后,球 $i$ 在盒子 $A_i$ 中。
你怀疑他是否正确执行了程序。请判断他报告的状态是否是程序的可能结果。
$1$ 个输入有 $T$ 个测试用例。
### 制约
- $1 \leq T \leq 250000$
- $1 \leq N \leq 250000$
- $1 \leq A_i \leq N$
- 每个测试点中所有测试用例的 $N$ 之和最多为 $250000$。
- 所有输入值均为整数。
输入格式
输入内容由标准输入提供,格式如下
>$T$
$case_1$
$case_2$
$\vdots$
$case_T$
每个测试用例的格式如下:
>$N$
$A_1$ $A_2$ $\cdots$ $A_N$
输出格式
对于每个测试用例,如果 Snuke 报告的状态是程序的可能结果,则打印 `Yes`,否则打印 `No`。
### 样例 1 解释
### 样本输出 1
下面的步骤产生了 Snuke 报告的状态,所以答案是 `Yes`。
- 将球 $1, 2, 3$ 分别放入盒子 $1, 1, 2$ 中。
- 取出盒子 $1$ 中的球,并将它们排列为 $(2, 1)$ 。
- 将球 $2$ 放入盒子 $1$ 。
- 将球 $1$ 放入盒子 $2$ 。
- 从盒子 $2$ 中取出球,摆成 $(1, 3)$ 的样子。
- 将球 $1$ 放入盒子 $3$ 。
- 将球 $3$ 放入盒子 $1$ 。
- 从盒子 $3$ 中取出球,按 $(1)$ 的方式摆放。
- 将球 $1$ 放入盒子 $1$ 。
- 现在再把球 $1, 2, 3$ 全部放入盒子 $1$ 。
说明/提示
### 制約
- $ 1\ \leq\ T\ \leq\ 250000 $
- $ 1\ \leq\ N\ \leq\ 250000 $
- $ 1\ \leq\ A_i\ \leq\ N $
- ひとつの入力の中のテストケースすべてにわたる $ N $ の総和は $ 250000 $ 以下である
- 入力される値はすべて整数
### Sample Explanation 1
$ 1 $ つめのテストケースについて考えます. 以下の手順を考えるとすぬけくんが報告した状態になるので,答えは `Yes` です. - ボール $ 1,2,3 $ をそれぞれ箱 $ 1,1,2 $ に入れる. - 箱 $ 1 $ のボールを取り出して,$ (2,1) $ と並べる. - ボール $ 2 $ を箱 $ 1 $ に入れる. - ボール $ 1 $ を箱 $ 2 $ に入れる. - 箱 $ 2 $ のボールを取り出して,$ (1,3) $ と並べる. - ボール $ 1 $ を箱 $ 3 $ に入れる. - ボール $ 3 $ を箱 $ 1 $ に入れる. - 箱 $ 3 $ のボールを取り出して,$ (1) $ と並べる. - ボール $ 1 $ を箱 $ 1 $ に入れる. - ボール $ 1,2,3 $ がそれぞれ箱 $ 1,1,1 $ に入っている状態になる.