并查集[union-find sets]

  • 创建
    1 const int maxn=5000;
    2 int father[maxn];
    3 void make(){
    4     for(int i=0;i<maxn;i++)    //初始化 
    5         father[i]=i;    //令每个元素的父亲都是元素本身 
    6 }
  • 查找
    1 int find(int x){
    2     if(x!=father[x])    //若父亲不为本身,则寻找元素x的祖先 
    3         father[x]=find(father[x]);    //通过寻找元素x父亲的父亲找到祖先 
    4     return father[x];            //返回元素x的祖先 
    5 } 
  • 合并
    1 void union(int x,int y){
    2     x=find(x);    //寻找x的祖先 
    3     y=find(y);    //寻找y的祖先 
    4     if(x==y)    //若x和y为同一祖先,return 
    5         return;
    6     father[x]=y;//else令x的祖先为y,x集合从属于y集合 
    7 }

 

posted @ 2019-09-12 17:11  Silke  阅读(228)  评论(0)    收藏  举报