// 并查集
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=111;
int before[N];
int my_find( int n )
{
int r=n,i=n,temp;
// 只有 根节点的上级 == 它本身
while( before[r]!=r ) r=before[r];
// 路径压缩
while( i!=r ) // 此r非彼r 当n不是根节点时 r值就已经变了
{ // 这里的r 就是根节点
temp=before[i]; // 一开始 i=n temp 暂存上级
before[i]=r; // 从下往上 将上级都改为根节点
i=temp; // 读取上级
}
return r; // 返回 根节点
}
// 如果 a,b 的没有连通 ( 根节点不同 ) 任意将其一连接到另一
void my_link( int a,int b )
{
int ra=my_find(a),rb=my_find(b);
if( ra!=rb ) before[ra]=rb;
}
/**/