并查集

简单说明:并查集(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 }                               //合并

 

posted @ 2018-05-25 21:49  uncklesam7  阅读(123)  评论(0编辑  收藏  举报