并查集

int find(int x){
    if(x==pre[x]) return x;
    return pre[x]=find(pre[x]);
}
void unite(int x,int y){
    x=find(x);
    y=find(y);
    if(x!=y) pre[x]=y;
}
void is_connect(){//if cnt == 1 :连通集
                  //else:有cnt 个连通分支
    for(int i=1;i<=n;i++)
        if(pre[i]==i) cnt++;
}
//查找x,y是否连通,find(x)==find(y);s
int main()
{
    for(int i=1;i<=N;i++)//初始化
        pre[i]=i;
    return 0;
}

 

posted @ 2019-03-25 21:39  Coodyzのblog  阅读(131)  评论(0编辑  收藏  举报