并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。
初始化
把每个点所在集合初始化为其自身。
通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为O(N)。
查找
查找元素所在的集合,即根节点。
合并
将两个元素所在的集合合并为一个集合。
通常来说,合并之前,应先判断两个元素是否属于同一集合,这可用上面的“查找”操作实现。
查找直接
int find(int i)
{
return map[i]==i?i:find(map[i]);
} //等于说找i的爸爸 比如跟i同一集合的,其中只有一个元素能代表这个集合。
合并
根据条件不同可以有不同的合并方法
最简单的如下
map[find(a)]=map[find(b)];
适用范围:无向图的联通分量 ,无向图联通,等一些。
![](https://i-blog.csdnimg.cn/blog_migrate/cca28939659ad813e13bcfbfb64f0e51.png)