U645479 并查集测试
题目背景
**update:由于文件大小限制,只保留数据点 $1 , 2 , 5 , 6$。**
**本题数据范围已经更新到 $1\le N\le 10^6$,$1\le M\le 2\times 10^6$。**
题目描述
如题,现在有一个并查集,你需要完成合并和查询操作。
输入格式
第一行包含两个整数 $N,M$ ,表示共有 $N$ 个元素和 $M$ 个操作。
接下来 $M$ 行,每行包含三个整数 $Z_i,X_i,Y_i$ 。
当 $Z_i=1$ 时,将 $X_i$ 与 $Y_i$ 所在的集合合并。
当 $Z_i=2$ 时,输出 $X_i$ 与 $Y_i$ 是否在同一集合内,是的输出
`Y` ;否则输出 `N` 。
输出格式
对于每一个 $Z_i=2$ 的操作,都有一行输出,每行包含一个大写字母,为 `Y` 或者 `N` 。
说明/提示
**update:由于文件大小限制,只保留数据点 $1 , 2 , 5 , 6$。**
没有修改行末的 `\r\n`。
对于 $100\%$ 的数据,$1\le N\le 10^7$,$1\le M\le 2\times 10^7$,$1 \le X_i, Y_i \le N$,$Z_i \in \{ 1, 2 \}$。
对于数据点:
1. **数据点** $1 \sim 4$:数据生成器在 @[木木!](https://www.luogu.com.cn/user/49458) 提供的代码基础上**修改**为本人码风并将慢的一批的 `fprintf` 替换为重定向 `stdout` 后使用关闭了同步流的 `cout`,答案使用**本人**自己写的**路径压缩和按秩合并**的并查集 生成。
2. **数据点** $5 \sim 8$:数据生成器与答案生成器均使用 @[木木!](https://www.luogu.com.cn/user/49458) 提供的代码。
::::info[所有代码]
### 数据点 $1 \sim 4$
#### gen
:::info[代码]
```cpp
#include
#define inline
//#define int ll
//#define endl '\n'
#define sh short
#define fi first
#define se second
#define db double
#define ldb long db
#define ll long long
#define ull unsigned ll
#define uint unisigned int
#define PII pair < int, int >
#define fopen(x) frein(x) , freout(x)
#define fix(x) fixed '9') f ^= ch == '-', ch = gc() ;
while(ch >= '0' && ch