并查集

本文深入解析并查集的数据结构原理,包括其在解决集合关系问题中的作用,如判断节点归属、快速合并集合等。文章还介绍了并查集的扁平化策略以提升效率,以及在朋友圈、岛问题等实际场景的应用案例。同时,提供了并查集的实现模板,如路径压缩和合并操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.常见问题:
?并查集必须一次性给出所有数据,而不能流式输入
1.并查集是解决什么问题的?
①判断两个节点是否属于一个集合
②快速将两个节点所在的节点合并

2.并查集的本质是什么?多叉树

3.为什么要将并查集扁平化
判两个节点是否属于同一集合或快速合并集合,都需要找到根节点,太浪费时间。扁平化可以降低时间复杂度

4.单次查询和合并的时间复杂度未O(1)

5.并查集应用:
A.合并:朋友圈/岛问题(L547)、冗余连接(L684)、强盗团伙(A784)
B.并查集解决的是图中的关系问题,在一个图中和某个点有关系的点是该点所在的行和列(A784)

二.并查集模板
1.路径压缩

for(int i=0;i<arr.length;i++)
    arr[i]=i;//将所有节点的父节点设为自己
int find(int x)
{
    if(p[x]!=x) return p[x]=find(p[x]);
    return p[x];
}

2.合并

p[find(x)]=find(y);//x的祖先是赋值为y的祖先

3.判断父节点是否相同

if(p[y]!=p[x]) print("YES");
else  print("NO");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值