并查集
1|0并查集
1|1概述
- 并查集是一种树形数据结构,经常用于处理一些集合之间的操作,例如元素查找,集合合并。
- 不同集合在并查集中以不同的树表示,一般每棵树的根节点会作为当前集合的代表元。
- 想要查询两个元素是不是在同一集合中,只需要比较两个元素所在集合的代表元是否相同即可。
1|2实现
-
初始化
-
-
假设有
个元素,这些元素初始都是独立的。显然它们构成了 个集合,每个集合的代表元就是元素自己。 -
-
将两个元素
, 所在的集合合并。-
先找到
, 对应的代表元。(即 等于自己的元素) -
将其中一个代表元的
指向另外一个,那么在这个代表元下的所有元素都会指向另外一个。 -
-
-
路径压缩
-
如果并查集在合并中形成一条长链,每次查找代表元都可能要花费大量时间。
-
我们可以缩短并查集中的路径,具体做法就是在查询的过程中,把沿途的每个节点的
都设为集合代表元。 -
当有
个元素和 次查询时,时间复杂度 -
-
-
-
-
启发式合并
-
在合并集合的时候,我们尽量选择包含元素个数少的集合把它并入另一个集合中,使需要改变代表元的元素的数量尽可能少。
-
当有
个元素和 次查询时,时间复杂度 (跟路径压缩没差,其实可以用路径压缩) -
-
-
按深度合并
-
在合并集合的时候,我们尽量选择深度较小的集合把它并入另一个集合中。
-
在路径压缩的时候,有可能会破坏维护的深度值,但算法总体复杂度不会变差
-
-
1|3例题
-
-
模板题
-
-
-
统计连通块
-
这类题统计连通块个数就是统计
数组等于其本身的个数。 -
即集合数量。
-
-
-
-
并查集的扩展域(敌人的敌人是朋友)
-
并查集结合筛法
-
筛的过程中合并,刚好就是质因数有 p 的数。
-
奇怪的
fa
数组并查集-
-
fa
数组是map<string, string>
-
-
-
__EOF__

本文作者:Kdlyh
本文链接:https://www.cnblogs.com/kdlyh/p/17858783.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/kdlyh/p/17858783.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下