并查集总结

  1. 并查集模板

并查集模板


const int N=30005;
int fa[N],s[N],h[N];

void Init(int n)
{
    for(int i=1;i<=n;++i)
        fa[i]=i,ran[i]=0;
    //刚开始每个人都是自己的老大,每个人都没有手下
}
int Find(int x)
{
    return x==fa[x]?x:fa[x]=Find(fa[x]);
}
void Merge(int x,int y)
{
    int fx=Find(x);
    int fy=Find(y);
    if(fx==fy)  return;
    if(ran[fx]<ran[fy])
        fa[fx]=fy;
    else
    {
        fa[fy]=fx;
        if(ran[fx]==ran[fy])
            ran[fx]++;
    }
}