并查集

目录

并查集的作用

基本原理

递归寻找某一元素的树根

合并两个集合


并查集的作用

  1. 将两个集合合并

  2. 询问两个元素是否在一个集合当中

基本原理

每个集合用一颗树来表示,树根的编号就是整个集合的编号,每个结点存储它的父结点。比如:p[x] 表示 x 的父结点。

递归寻找某一元素的树根

int find(int x)
{
    if(p[x] != x) p[x] = find(p[x]);
    return p[x];
}

p数组表示父结点,比如:p[x] 表示 x 的父结点。

当 p[x] == x 时,表示 x 的父节点是树根。

每次寻找一结点的树根,也就是询问这个结点的集合,都需要依次向上遍历,这里可以采取路径压缩,每次询问都将这一结点的父节点改为根结点。这样询问某一结点的树根(即询问该结点属于哪一集合),时间复杂度可以近似O(1)。

合并两个集合

给定两个元素 a、b;将这两个元素所在的集合合并。

p[find(a)] = find(b);

上面这一行代码表示:将a属于的集合的树根,链接到b属于的集合的树根下。
这样就达到了两个元素所属的集合合并。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值