#aBC225D. [ABC225D] Play Train

[ABC225D] Play Train

AT_abc225_d [ABC225D] Play Train

题目描述

高桥君正在用玩具火车进行连接和分离的游戏。
共有 NN 辆火车,分别命名为火车 11、火车 22\ldots、火车 NN
一开始,所有火车都是分开的,互不连接。

现在有 QQ 个操作,请按给定顺序依次处理。
操作有以下 33 种类型之一:

  • 1 x y :将火车 xx 的尾部与火车 yy 的头部连接。
    保证以下条件成立:
    • xyx \neq y
    • 在执行该操作前,火车 xx 的尾部没有连接其他火车
    • 在执行该操作前,火车 yy 的头部没有连接其他火车
    • 在执行该操作前,火车 xx 和火车 yy 属于不同的连通分量
  • 2 x y :将火车 xx 的尾部与火车 yy 的头部分离。
    保证以下条件成立:
    • xyx \neq y
    • 在执行该操作前,火车 xx 的尾部与火车 yy 的头部直接连接
  • 3 x :输出包含火车 xx 的连通分量中所有火车的编号,按从头到尾的顺序输出。

输入格式

输入通过标准输入给出,格式如下:

NN QQ
query1\mathrm{query}_1
query2\mathrm{query}_2
\vdots
queryQ\mathrm{query}_Q

ii 个操作 queryi\mathrm{query}_i,首先给出操作类型 cic_i1,2,31,2,3 之一)。
ci=1,2c_i=1,2,则还会给出 x,yx,y;若 ci=3c_i=3,则还会给出 xx

即,每个操作有以下三种格式之一:

11 xx yy

22 xx yy

33 xx

输出格式

对于每个 ci=3c_i=3 类型的操作,假设应输出的火车编号为 j1,j2,,jMj_1, j_2, \ldots, j_M
请按如下格式输出一行:

MM j1j_1 j2j_2 \ldots jMj_M

ci=3c_i=3 类型的操作共有 qq 个,请输出 qq 行。
kk 行输出第 kk 个此类操作的答案。

输入输出样例 #1

输入 #1

7 14
1 6 3
1 4 1
1 5 2
1 2 7
1 3 5
3 2
3 4
3 6
2 3 5
2 4 1
1 1 5
3 2
3 4
3 6

输出 #1

5 6 3 5 2 7
2 4 1
5 6 3 5 2 7
4 1 5 2 7
1 4
2 6 3

说明/提示

数据范围

  • 2N1052 \leq N \leq 10^5
  • 1Q1051 \leq Q \leq 10^5
  • 1xN1 \leq x \leq N
  • 1yN1 \leq y \leq N
  • 所有输入均为整数
  • 所有操作均满足题目中的条件
  • 所有 3 x 类型操作输出的火车编号总数不超过 10610^6

样例解释 1

处理到 query5\mathrm{query}_5 时,火车的连接情况如下图所示。此时,例如火车 22 与火车 3,5,6,73,5,6,7 属于同一连通分量,但与火车 1,41,4 不属于同一连通分量。

处理到 query11\mathrm{query}_{11} 时,火车的连接情况如下图所示。

由 ChatGPT 4.1 翻译