貌似这么短的代码也不需要什么模板。。但还是写出来装下逼吧。。
带路径压缩的查找算法,需要对p[i]初始化为i,1<=i<=n,n是集合元素个数
int find(int x){
int r,t,i;
r=x;
while(r!=p[r])
r=p[r];
i=x;
while(i!=r){
t=p[i];
p[i]=r;
i=t;
}
return r;
}按秩合并算法,需要对rank[i]初始化为0,1<=i<=n,n是集合元素个数,还要注意,该函数的使用前提是ra!=rb
void merge(int ra,int rb){
if(rank[ra]==rank[rb]){
p[rb]=ra;
rank[ra]++;
}else{
if(rank[ra]>rank[rb])
p[rb]=ra;
else
p[ra]=rb;
}
}初始化
void init(int n){
int i;
for(i=1;i<=n;i++)//默认编号是1到n,n是集合元素个数
p[i]=i,rank[i]=0;
}
本文介绍了一种常用的并查集算法,包括带路径压缩的查找和按秩合并操作。这两种操作可以有效提高并查集处理效率,减少查询时间复杂度。
2684

被折叠的 条评论
为什么被折叠?



