//这个是递归,查找的同时把所经过的点都进行了路径压缩
int find(int x)
{
if(x!=pre[x])pre[x]=find(pre[x]);
return pre[x];
}
//这个是查找哪个点把哪个点路径压缩了,而其他点则没有
int find(int x)
{
int a=x;
while(x!=pre[x])
x=pre[x];
pre[a]=x;
return x;
}
//这个是和那个递归的意思一样,但是就是先查找到根节点,再把这一路的点进行路径压缩
int find(int x)
{
int a=x,b;
while(x!=pre[x])//这里就是先找
x=pre[x];
while(a!=pre[a])//这里条件还可以是a!=x,刚提交了一下都过了
{//再把这一路的点进行压缩
b=pre[a];
pre[a]=x;
a=b;
}
return x;
}