//并查集的实现
#include<cstdio>
#define N 100005
int par[N],depth[N];
//初始化
void init(int n){
for(int i=0;i<n;i++){
par[i]=i;
depth[i]=0;
}
}
int find(int x)
{
if(par[x]==x)
return x;
else
return par[x]=find(par[x]);//这里是先把par[x]赋值然后返回,路径压缩
}
//合并操作
void unite(int x,int y)
{
x=find(x);
y=find(y);
if(x==y) return ;
if(depth[x]<depth[y])
par[x]=y;
else
{
par[y]=x;
if(depth[x]==depth[y]) depth[x]++;
}
}
bool same(int x,int y)
{
return find(x)==find(y);
}
并查集的实现
最新推荐文章于 2024-07-09 22:37:42 发布