模板系列-并查集

并查集模板

1、初始化

void init{
	for(int i=1;i<=n;i++){
        fa[i]=i;//把结点i的集合号初始化为其自身编号
	}
}

2、查找

版本一:

int find(int i){
	while(i!=pi[i]){
        i=pi[i]=pi[pi[i]];
    }
	return pi[i];
}

版本二:

int find(int x) {
    if(x != fa[x]){//当x不等于它的爸爸时(当它是祖先时,它没有爸爸) 
         fa[x] = find(fa[x]);//继续找他的爸爸的爸爸 
    }
    return fa[x];//返回祖先 
}//查找 

3、合并

void unity(int x, int y){
    int r1 = find(x);//找到x的祖先 
    int r2 = find(y);//找到y的祖先 
    if(r1!=r2){
        fa[r1] = r2;//祖先和祖先结为父子(谁是父亲谁是儿子都可以) 
    }
}//合并 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值