并查集
并查集一般用于:
将两个集合合并
询问两个元素是否在一个集合当中
基本原理:
每个集合用一棵树来表示。
树根的编号就是整个集合的编号。
每个节点存储他的父节点,使用pre[x]表示x的父节点
问题:
如何判断树根?答 if pre[x] == x
如何求x的集合编号?答 while pre[x] != x: x = pre[x]
如何合并两个集合?答 如何需要合并的两个集合为a、b,那么将b插入到a中即可(或将a插入b中)即pre[b]=a
优化:
路径压缩(常用):从某个节点a找到其所在集合的根节点r,那么可以将a到根节点路径上各点x直接指向根节点,即使得pre[x] = r
按秩合并(不常用):对于每个集合有一个rank值,在合并两个集合的时候将rank值较小的插入到rank值较大的中
模版题:合并集合

维护元素个数:连通块中点的数量

注意:连通块中的点指的是两点之间是连通的,比如从点a可以访问到点b,从点b可以访问到点a,那么a、b两点之间就是连通的,是连通块中的点。
Python并查集模版
普通版
按秩合并
路径压缩
练习
参考
最后更新于
这有帮助吗?