并查集 DSU
查看更多相关内容
定义¶
并查集(Disjoint Set Union,DSU)是一种用于管理元素所属集合的数据结构,实现为一片森林。
支持查找(Find,查找元素所属集合)和合并(Unite,将两个元素所在的集合合并为一个集合)。
对于非整数,可以使用哈希表将元素映射到整数。
并查集通常用数组实现。
对于并查集数组 dsu[],dsu[i] 表示元素 i 所在集合的根(存储下标),若该元素就是其所在集合的根,则存储它自己的下标。
操作¶
并查集支持以下三种操作:make_set 建集、find 查找和 union 合并。
make_set 建集¶
初始每个元素都有一个独立的集合,这个集合只有其一个元素,且根就是其本身。
实现思路:创建一个 root[] 数组,表示一个并查集,将每个元素的根都指向它本身。
union 合并¶
将两个元素所在的集合合并(前提是这两个元素不在一个集合内)。
实现思路:union(x, y),将 x 所属集合合并到 y 所属集合内,y 做新的根。
优化——按秩合并(启发式合并) :把小集合的根指向大集合的根。
find 查找¶
查找元素所属集合。
通常用于判断两个元素是否在同一集合内。
优化——路径压缩:在返回的路上,顺带修改各结点的父结点为根。
实现¶
以下是一个封装好的 DSU 模板。