int findFa(int x)
{
if(fa[x] == x) return x;
return findFa(fa[x]);
}
void uni(int a,int b)
{
fa[findFa(a)] = findFa(b);
}
路径压缩:只要我们在查询(findFa函数中)的过程中,把沿途的每个节点的父节点都设为根节点即可:
int findFa(int x)
{
if(fa[x] == x) return x;
fa[x] = findFa(fa[x]);
return fa[x];
}
简写:
int findFa(int x)
{
return x == fa[x] ? x : (fa[x] = findFa(fa[x]));
}