并查集模板
并查集是将有关系的一系列元素组合成为一个集合并且区分出没有关联的集合元素,
#include<iostream>
using namespace std;
const int N = 1e5+5;
int fa[N],Rank[N],n;
void init()
{
for(int i=1;i<=n;i++)
{
fa[i]=i;//自己为自己的父节点
Rank[i]=0;
}
}
int Find(int x)
{
if(fa[x]!=x)//父节点并非本身,属于某一个集合
fa[x]=Find(fa[x]);//路径压缩
return fa[x];
}
void uni(int x,int y)
{
int xx=Find(x);
int yy=Find(y);
if(xx==yy)//x和y属于一个集合
return ;
if(Rank[xx]>Rank[yy])//按秩集合
fa[yy]=xx;
else
{
fa[xx]=yy;
if(Rank[xx]=Rank[yy])
Rank[yy]++;
}
}
int main()
{
int x,y;
init();
uni(x,y);
return 0;
}