并查集我知不道

#include <iostream>
using namespace std;
int set[10];
int find(int x)//找x的祖先 
{
    if(set[x]==x)
        return x;
    return set[x]=find(set[x]);//把x的各个祖先的双亲都置最久远的祖先 
}
//递归的思路:每个元素都将自己的双亲置为双亲为参数得到的值(递归就是要保持当前问题与其子问题的处理方式相同)
void dispSet(int n) { for(int i=0; i<n; i++ ) cout<<set[i]<<' '; cout<<endl; } int main() { int n=10,x,y,anx,any; for(int i=0; i<n; i++) set[i]=i; dispSet(n); while(cin>>x>>y) { anx=find(x); any=find(y); set[anx]=any;//x,y祖先之间建立起关系,让祖先唯一 cout<<"x's ancestor is "<<find(x)<<endl; cout<<"y's ancestor is "<<find(y)<<endl; dispSet(n); } }
原文地址:https://www.cnblogs.com/ewitt/p/14792364.html