典型的查并集算法,适用于森林的连接
#include <iostream>
using namespace std;
int const maxn = 100010;
int father[maxn];
int find(int x) {
if (x!=father[x])
father[x] = find(father[x]);
return father[x];
}
int main() {
for (int i=0;i<maxn;i++) father[i] = i;
int a,b;
while(cin>>a>>b) {
int fa = find(a);
int fb = find(b);
if(fa!=fb) {
cout<<a<<" "<<b<<endl;
father[fa] = father[fb]; //要用连通分量进行赋值!!!
}
}
return 0;
}