前言
并查集是一种优雅的数据结构。
一、功能
1.将两个数据merge在一起,产生一个没有回路的关系图。
2.查询两个数据是否有关系。(同一个集合中,数据元素的掌门唯一)
二、代码
1.查找操作
int find(int s){
int bs=s;
while(fa[s]!=s)s=fa[s];
while(bs!=s){
int flo=fa[bs];
fa[bs]=s;
bs=flo;
}
return s;
}
2.合并操作
void merge(int s1,int s2){
int fs1=find(s1);
int fs2=find(s2);
if(fs1==fs2)return;
fa[fs2]=fs1;
}
3.使用之前注意初始化
void init(){
for(int i=0;i<=maxn;i++)fa[i]=i;
}