并查集
可以解决的问题:
核心操作 find
int find(int x) {
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
初始化(最开始代表一个点是一个集合)
for(int i = 1; i <= n; i++)
p[i] = i;
判断两个元素是否属于一个集合
if(find(a) == find(b))
cout << "Yes" << endl;
else
cout << "No" << endl;
判断最后有几个集合
int cnt = 0;
for(int i = 1;i <= n; i++)
if(p[i] == i) cnt++