int father[N],num[N];
void init()//根据需要可以增加,如vis等
{
for(int i=0;i<N;i++)
{
father[i]=i;
num[i]=1;
}
}
int find(int x)//压缩路径:找到父亲并把路径上的所有点的父亲都改为一个
{
if(father[x]!=x)
father[x]=find(father[x]);
return father[x];
}
void merge(int x,int y)
{
x=find(x);
y=find(y);
if(x==y)
return;
if(num[x]>=num[y])//防止产生小树中的数做大树的父亲的情况
{
father[y]=x;
num[x]+=num[y];
}
else
{
father[x]=y;
num[y]+=num[x];
}
}
#并查集模板#
最新推荐文章于 2022-10-12 00:39:00 发布