并查集模板
int pre[maxn];
void init()
{
for(int i=0;i<maxn;i++)
{
pre[i]=i;
}
}
int Find(int x)
{
int p=x,tmp;
while(x!=pre[x])
x=pre[x];
while(p!=x)
{
tmp=pre[p];
pre[p]=x;
p=tmp;
}
return x;
}
void join(int x,int y)
{
int p,q;
p=Find(x);
q=Find(y);
if(p!=q)pre[p]=q;
}