#include using namespace std; int n,m;//有n个人,他们之间有m个关系(上下级关系) int pre[1005];//pre[x] = y , x号的上级是y号 //查找并返回x所在集合的老大是谁 int find(int x){ int r = x ; // 委托r去查找x的老大 while( r != pre[r] ){ r = pre[r]; } return r; } //合并 ,将x所在集合与y所在集合进行合并 void join(int x,int y){ int fx = find(x);//找到x的老大 int fy = find(y);//找到y的老大 pre[fx] = fy; } int main(){ cin>>n>>m; for(int i=1;i<=n;i++) pre[i] = i;//初始化,人与人之间还有没任何关系 //建立人物之间的关系 for(int i=1;i<=m;i++){ int x,y; cin>>x>>y;// x的上级是y pre[x] = y; } for(int i=1;i<=n;i++){ cout<>x>>y; join(x,y); printf( "%d 所在集合的老大是 %d , ", x,find(x) ); printf( "%d 所在集合的老大是 %d , ", y,find(y) ); printf( "将%d所在集合和%d所在集合合并后,新的集合的老大是%d.", x,y,find(x)); return 0 ; } /* 测试数据 10 10 1 1 2 2 3 3 4 2 5 1 6 4 7 4 8 3 9 3 10 4 */