AT_abc225_d [ABC225D] Play Train

题目描述

高桥君正在用玩具火车进行连接和分离的游戏。 共有 $N$ 辆火车,分别命名为火车 $1$、火车 $2$、$\ldots$、火车 $N$。 一开始,所有火车都是分开的,互不连接。 现在有 $Q$ 个操作,请按给定顺序依次处理。 操作有以下 $3$ 种类型之一: - `1 x y` :将火车 $x$ 的尾部与火车 $y$ 的头部连接。 保证以下条件成立: - $x \neq y$ - 在执行该操作前,火车 $x$ 的尾部没有连接其他火车 - 在执行该操作前,火车 $y$ 的头部没有连接其他火车 - 在执行该操作前,火车 $x$ 和火车 $y$ 属于不同的连通分量 - `2 x y` :将火车 $x$ 的尾部与火车 $y$ 的头部分离。 保证以下条件成立: - $x \neq y$ - 在执行该操作前,火车 $x$ 的尾部与火车 $y$ 的头部直接连接 - `3 x` :输出包含火车 $x$ 的连通分量中所有火车的编号,**按从头到尾的顺序**输出。

输入格式

输入通过标准输入给出,格式如下: > $N$ $Q$ > $\mathrm{query}_1$ > $\mathrm{query}_2$ > $\vdots$ > $\mathrm{query}_Q$ 第 $i$ 个操作 $\mathrm{query}_i$,首先给出操作类型 $c_i$($1,2,3$ 之一)。 若 $c_i=1,2$,则还会给出 $x,y$;若 $c_i=3$,则还会给出 $x$。 即,每个操作有以下三种格式之一: > $1$ $x$ $y$ > $2$ $x$ $y$ > $3$ $x$

输出格式

对于每个 $c_i=3$ 类型的操作,假设应输出的火车编号为 $j_1, j_2, \ldots, j_M$, 请按如下格式输出一行: > $M$ $j_1$ $j_2$ $\ldots$ $j_M$ 设 $c_i=3$ 类型的操作共有 $q$ 个,请输出 $q$ 行。 第 $k$ 行输出第 $k$ 个此类操作的答案。

说明/提示

### 数据范围 - $2 \leq N \leq 10^5$ - $1 \leq Q \leq 10^5$ - $1 \leq x \leq N$ - $1 \leq y \leq N$ - 所有输入均为整数 - 所有操作均满足题目中的条件 - 所有 `3 x` 类型操作输出的火车编号总数不超过 $10^6$ ### 样例解释 1 处理到 $\mathrm{query}_5$ 时,火车的连接情况如下图所示。此时,例如火车 $2$ 与火车 $3,5,6,7$ 属于同一连通分量,但与火车 $1,4$ 不属于同一连通分量。 ![](https://img.atcoder.jp/ghi/dbfd2666776e351752bba67e9b65fafa.png) 处理到 $\mathrm{query}_{11}$ 时,火车的连接情况如下图所示。 ![](https://img.atcoder.jp/ghi/dad814ca77ec58f31cb88c62b9825bef.png) 由 ChatGPT 4.1 翻译