并查集

Posted uncklesam7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并查集相关的知识,希望对你有一定的参考价值。

简单说明:并查集(union-find set),根据字面意思可以理解为在N个元素中,将属于同一组元素所在的集合合并,期间要反复查找一个元素在哪个集合中,即并+查。处理这类问题时便可以用到这种特殊的数据结构,保证了空间时间不会超过限制。

并查集是一种抽象的数据结构,其本身不具有结构,必须借助一定的数据结构才能够实现,一般可以用数据,链表和树来实现,下面呈现的是用数组实现的方法。

在实现过程中,每一个元素需要进行的操作可以分为以下三步:

(1)、MAKE(x):建立一个新的集合,其仅有的成员就是x,也就是初始化的过程;

(2)、UNION(x,y):将包含元素x和元素y的动态集合合并成一个新的集合;

(3)、FIND(x):返回一个指向包含x集合的代表;

code:

 1 for(int i=1;i<=n;i++)
 2   father[i]=i;              //初始化
 3 
 4 int find(int x){
 5   if(father[x]!=x) father[x]=find(father[x]);
 6 return father[x];         //压缩路径,减少事件复杂度
 7 }                               //查询
 8 
 9 void union(int x,int y){
10   x=find(x);
11   y=find(y);
12   father[y]=x;
13 }                               //合并

 

以上是关于并查集的主要内容,如果未能解决你的问题,请参考以下文章

想要学会并查集吗?看我四十行代码实现它

树--12---并查集

笔记并查集---无向图处理代码模板及类型题

并查集

力扣 每日一题 886. 可能的二分法难度:中等,rating: 1794(并查集 / 拆点优化的扩展域并查集)

并查集