分析
这题是并查集的典型应用,并查集可以用来维护无向图的连通块
这题的三种操作可以这样理解:
1.要求把两个点连起来,本质是把这两个点放到同一个集合中
2.查询两个点是否在同一个集合中,本质是找这两个点所在集合的根节点是否相等
3.查询某个点所在的集合的点的总数量
因为这题有些操作是重复使用的,所以需要把功能独立出来,也就是写成函数
函数1:初始化并查集,同时初始化每个集合的点的总数量
函数2:并查集函数
函数3:判断两个点是否在同一个集合
函数4:合并两个点所在的集合
代码
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
//因为这题需要查询每个集合有多少个元素,因此需要一个额外数组来记录(len)
int p[N], len[N], n, m, a, b;
string op;
//初始化并查集的函数
void init() {
for (int i = 1