并查集&带权并查集算法模板
并查集 | Distjoint Set
算法简介
并查集(disjoint set),英文意为与若干集合做交互,中文就更直观的表达了对集合做合并或查询的操作。
一般情况下需要其他信息配合并查集进行维护,也就是带权并查集。
有一些算法是实现也是基于并查集的思想,比如说最小生成树的kruskal和最近公共祖先的tarjan。
存储方案
逻辑存储:使用树来表示集合的从属关系
物理存储:一个一维数组p[N],表示为某个节点的祖宗节点
代码模板
1 | //物理存储 |
带权并查集常见类型
这里特指需要更改merge或者find函数的类型
- 更新集合的大小 -> 绑定到根节点
- 更新到根节点的距离 -> 绑定到每个节点