#include <iostream>
#include <algorithm>
#define MAXN 1000
#define debug(x) (cout << #x << ":" << x << endl)
using namespace std;
int f[MAXN];
//寻找根节点
int find(int x){
if(x != f[x]) f[x] = find(f[x]);
return f[x];
}
//合并两个节点
void merge(int a, int b){
int pa = find(a);
int pb = find(b);
if(pa != pb){
f[pa] = pb;
}
}
//初始化
void init(){
for(int i = 0; i < MAXN; i++)
f[i] = i;
}
int main(){
init();//初始化后,每个节点的父节点就是本身,如:f[1] = 1
//1为根节点的集合
f[2] = 1;
f[3] = 2;
f[4] = 3;
f[5] = 4;
//6为根节点的集合
f[7] = 6;
f[8] = 7;
//此时存在以1为根节点的集合,和以6为根节点的集合
//5的父节点是4,4的父节点是3,以此类推
//到1的时候正好父节点和节点本身相等,那么1就是所有节点的根节点
cout<<find(1)<<endl;
cout<<find(2)<<endl;
cout<<find(3)<<endl;
cout<<find(4)<<endl;
cout<<find(5)<<endl;
//和上面一样6是所有节点的根节点
cout<<find(7)<<endl;
cout<<find(8)<<endl;
return 0;
}