并查集
用于解决连通块问题。
判断集合个数也就是判断p[x] == x
的个数
836. 合并集合 - AcWing题库
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int p[N]; // 记录每个元素的father
int n, m;
int find(int x){ // 查询元素x的father
if(p[x] != x) p[x] = find(p[x]); // 核心:路径压缩
return p[x];
}
int main()
{
cin >> n >> m;
for(int i = 1; i <= n; i++) p[i] = i; // 初始化
while(m--){
char op;
cin >> op;
if(op == 'M') {
int a, b;
cin >> a >> b;
p[find(a)] = find(b); // 合并操作
}
else{
int a, b;
cin >> a >> b;
if(find(a) != find(b)) puts("No"); // 查询操作
else puts("Yes");
}
}
return 0;
}