路径压缩之后的算法
最初的算法,在查找一个结点的根的时候,可能会遇到树枝很长的情况。路径压缩就是在寻找根的时候,顺便把这个结点的父节点改成最终要寻找的根。
int pre[];
int GetRoot(int a)
{
if(pre[a] != a)
pre[a] = GetRoot(pre[a]);
return par[a];
}
bool Query(int a, int b)
{
return GetRoot(a) == GetRoot(b);
}
void Merge(int a,int b)
{
pre[GetRoot(a)] = GetRoot(b);
}