并查集[union-find sets]

好久不见. 提交于 2019-11-29 10:12:30
  • 创建
    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 merge(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 }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!