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 $ に入っている状態になる.