//并查集
//注意类型匹配
const int maxn = 100002;
int DSet[maxn];
void init(int n) {
for(int i = 0 ; i <= n ; i ++)
DSet[i] = i;
}
int findP(int id) {
if(DSet[id] != id)
DSet[id] = findP(DSet[id]);
return DSet[id];
}
//返回根节点ID
int UnionEle(int a,int b) {
a = findP(a);
b = findP(b);
if(a > b)
a ^= b ^= a ^= b;
DSet[b] = a;
return a;
}