并查集(入门)

int find(int x)          //查找我(x)的掌门

{
    int r=x;             //委托 r 去找掌门
    while (pre[r ]!=r)   //如果r的上级不是r自己(也就是说找到的大侠他不是掌门 = =)

    r=pre[r ] ;          // r 就接着找他的上级,直到找到掌门为止。

    return  r ;          //掌门驾到~~~

}

void join(int x,int y)     //我想让虚竹和周芷若做朋友

{

    int fx=find(x),fy=find(y);  //虚竹的老大是玄慈,芷若MM的老大是灭绝

    if(fx!=fy)             //玄慈和灭绝显然不是同一个人

    pre[fx ]=fy;           //方丈只好委委屈屈地当了师太的手下啦

}
int main()
{
    for(i=1;i<=N;i++)       //初始化   
    pre[i]=i;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41243063/article/details/81450112