浅谈并查集初步
蒟蒻入门的一些见解,不喜勿喷。
并查集的基础作用很简单,也很重要,就是快速把集合取并。
我们用递归实现的find函数来查找母集,在查找的过程中更新沿路的集合的母集(路径压缩),将待合并的集合都归入一个集合的母集即可实现集合的合并。
贴下代码:
#include <bits/stdc++.h>
#define MAXN 10005
using namespace std;
int mset[MAXN]; //母集标号
int find(int n){
if(mset[n]==n) return n;
return mset[n]=find(mset[n]);
}
int main()
{
int n,m,a,b,c;
cin>>n>>m;
for(int i=1;i<=n;++i)
mset[i]=i; //初始化母集为自身
for(int i=1;i<=m;++i){
scanf("%d%d%d",&a,&b,&c);
if(a==1)
mset[find(b)]=find(c);
else
if(find(b)==find(c))
printf("Y\n");
else
printf("N\n");
}
return 0;
}