#P1019. 学校朋友圈

学校朋友圈

题目描述

新学期开始,学校有 nn 名学生,学生编号为 11 到 nn。

一开始,大家互相都不认识。

接下来会发生 mm 个事件,事件分为两类:

  • 1 a b:学生 aa 和学生 bb 成为了朋友;
  • 2 a b:询问学生 aa 和学生 bb 是否在同一个“朋友圈”中。

已知朋友关系具有传递性:

  • 如果 aa 和 bb 是朋友,bb 和 cc 是朋友,那么 aa 和 cc 也是朋友,所有的朋友在同一个朋友圈中。

也就是说,“朋友圈”是一个由朋友关系连接起来的学生集合。

请你设计一个数据结构,快速支持以下操作:

  • 合并两个朋友圈;
  • 判断两个学生是否在同一个朋友圈中。

输入格式

第一行包含两个整数 nn 和 mm,分别表示学生人数和事件数量。

接下来 mm 行,每行包含三个整数 op,a,bop, a, b,表示一个事件:

  • 若 op=1op = 1,表示学生 aa 和学生 bb 成为了朋友;
  • 若 op=2op = 2,表示询问学生 aa 和学生 bb 是否在同一个朋友圈中。

输入保证:

  • 1≤a,b≤n1 \le a, b \le n;
  • opop 只会是 11 或 22。

输出格式

对于每一个 op=2op = 2 的询问,输出一行:

  • 如果学生 aa 和学生 bb 在同一个朋友圈中,输出 YES;
  • 否则,输出 NO。

输出顺序应与输入中询问出现的顺序一致。

样例

5 7
1 1 2
2 1 2
1 2 3
2 1 3
2 1 4
1 4 5
2 4 5
YES
YES
NO
YES

样例 1 解释

初始时,每个学生各自在一个朋友圈中:

{1}, {2}, {3}, {4}, {5}

执行事件:

  1. 1 1 2:学生 1 和学生 2 成为朋友,朋友圈变为 {1, 2}。
  2. 2 1 2:学生 1 和学生 2 在同一个朋友圈,输出 YES。
  3. 1 2 3:学生 2 和学生 3 成为朋友,朋友圈变为 {1, 2, 3}。
  4. 2 1 3:学生 1 和学生 3 在同一个朋友圈,输出 YES。
  5. 2 1 4:学生 1 和学生 4 不在同一个朋友圈,输出 NO。
  6. 1 4 5:学生 4 和学生 5 成为朋友,朋友圈变为 {4, 5}。
  7. 2 4 5:学生 4 和学生 5 在同一个朋友圈,输出 YES。

数据范围

对于 50%50\% 的数据:n≤1000,m≤2000n \le 1000, m \le 2000

对于 100%100\% 的数据:1≤n≤1051 \le n \le 10^5,1≤m≤2⋅1051 \le m \le 2 \cdot 10^5,1≤a,b≤n1 \le a, b \le n,op∈{1,2}op \in \{1, 2\}