最近的并查集学习经验

我认识的并查集

一般包含以下几部分
1、储存前驱节点的数组 这个我喜欢叫db[n](代表缩写)每个聚落都有它们的代表节点。
2、一个查找代表节点的函数,如果它的代表不是它自己,那就寻找并返回那个代表。

int find(int x)//路径压缩版
{
	if(db[x]!=x) db[x]=find(db[x]);
	return db[x];
}
int find(int x)//未路径压缩
{
	return db[x]==x?x:find(db[x]);
}

3、合并函数,

//同时判断是否在同一集合和合并两者
bool hb(int x,int y)
{
    int xx=find(x),yy=find(y);
    if(xx!=yy)
    {
        db[xx]=yy;
        return 1;
    }
    return 0;
}

4、初始化
不一定要写成单独的函数,但一定要有,把每个节点代表赋为它自己,并且还能初始化其他有必要的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值