并查集
用于解决连通块问题。
判断集合个数也就是判断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的fatherif(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;
}