并查集我知不道
#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]<<'\t'; 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); } }