AT_abc395_d [ABC395D] Pigeon Swap
题目描述
有 $N$ 只鸽子(编号 $1,2,\ldots,N$)和 $N$ 个巢(编号 $1,2,\ldots,N$)。初始时,鸽子 $i$($1 \leq i \leq N$)位于巢 $i$ 中。
接下来对鸽子进行 $Q$ 次操作,操作分为以下三种类型:
- **类型 1**:给定整数 $a,b$($1 \leq a \leq N$,$1 \leq b \leq N$)。将鸽子 $a$ 从当前所在的巢中取出,放入巢 $b$。
- **类型 2**:给定整数 $a,b$($1 \leq a < b \leq N$)。将巢 $a$ 中所有鸽子移动到巢 $b$,同时将巢 $b$ 中所有鸽子移动到巢 $a$。这两个移动操作是同时进行的。
- **类型 3**:给定整数 $a$($1 \leq a \leq N$)。报告鸽子 $a$ 当前所在的巢的编号。
请输出所有类型 3 的操作的结果。
输入格式
输入通过标准输入给出,格式如下:
> $N$ $Q$
> $op_1$
> $op_2$
> $\vdots$
> $op_Q$
其中,第 $i+1$ 行的 $op_i$ 表示第 $i$ 次操作,格式为以下之一:
- 若为类型 1 操作:
`1 a b`
表示以 $a$ 和 $b$ 为参数执行类型 1 操作。
- 若为类型 2 操作:
`2 a b`
表示以 $a$ 和 $b$ 为参数执行类型 2 操作。
- 若为类型 3 操作:
`3 a`
表示以 $a$ 为参数执行类型 3 操作。
输出格式
设类型 3 的操作共有 $q$ 个,输出 $q$ 行,每行对应一个类型 3 操作的查询结果(即鸽子所在巢的编号)。
说明/提示
### 约束条件
- $1 \leq N \leq 10^6$
- $1 \leq Q \leq 3 \times 10^5$
- 所有操作均符合题目描述中的参数范围。
- 输入中至少包含一个类型 3 操作。
- 输入均为整数。
### 样例解释 1
操作过程中鸽子的移动如图所示(图片链接略)。类型 3 操作应报告的巢编号依次为 $4,5,2,5$,因此输出四行:`4`、`5`、`2`、`5`。
### 样例解释 2
在类型 1 操作中,可能存在将鸽子取出后又放回原巢的情况。
翻译由 DeepSeek R1 完成