并查集模板
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int p[N];
int fa(int x) {//求根节点
if(p[x]!=x)p[x]=fa(p[x]);
return p[x];
}
//查询是否在同一集合中
bool query(int x,int y) {
return fa(x)==fa(y);
}
//合并两个结点
void merge(int x,int y) {
p[fa(x)]=fa(y);
}
//初始化
void init() {
for(int i=1;i<=N;i++)p[i]=i;
}