算法 - 蓝桥杯并查集题型

目录

合并集合

连通块中点的数量

蓝桥杯2017年第八届真题-合根植物

[蓝桥杯][2019年第十届真题] 修改数组

蓝桥幼儿园


刷了好多题,发现并查集这种思想挺妙的,是时候总结一下了;

作用与基本原理:

套路问题:

用一道模板题方便讲解;

合并集合

首先设置一个函数find();

find()函数的作用如问题2, 求集合的祖宗节点

(while(p[x]!=x) x=p[x] 如果不是根就找上一个,直到找到根为止)

元素合并操作:(元素也是集合)

开始时每个集合都是一个独立的集合,并且都是等于自己本身下标的数
例如:
p[5]=5,p[3]=3;
如果是M操作的话那么就将集合进行合并,合并的操作是:
p[3]=p[5]=5;
所以3的祖宗节点便成为了5,此时以5为祖宗节点的集合为{5,3}

如果要将p[9]=9插入到p[3]当中,应该找到3的祖宗节点,然后再把p[9]=9插入其中,所以p[9]=find(3);(find()函数用于查找祖宗节点)

 集合合并操作:

假设有以6为祖宗节点的集合为{6,4,7,10}。如果要将以6为祖宗节点的集合插入到以5为祖宗节点的集合,则该操作可以是p[6]=find(3)(或者find(9),find(5));
此时p[6]=5
当然如果是以6为祖宗节点集合中的4,7,10则可以这样
p[find(4)]=find(3)

总结:

合并操作:p[以a为祖宗节点的集合]=以b为祖宗节点的集合; (以a为祖宗节点的集合插到以b为祖宗节点的集合)

但是如果每次查找祖宗节点都要while一遍(while(p[x]!=x) x=p[x]),耗时大,于是就有了路径压缩

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NO.-LL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值