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