并查集

树形结构,用于处理一下不相交集合的合并及查询问题,在使用中以森林表示。

father[i]表示第i个元素所在集合的代表元素(即i所在的树形结构的根)

初始化:

father[i]=i

查找代表元素:

int find(int x)
{
    if(father[x]==x)
      return x;
    else
       return find(father[x]);
}

合并:

f1=find(x);
f2=find(y);
father[f1]=father[f2];

路径压缩:

if(father[x]==x)
  return x;
return father[x]=find(father[x]);

  

原文地址:https://www.cnblogs.com/jyhywh/p/5708846.html