HDU1232

来源:互联网 发布:网络经常听的dj 编辑:程序博客网 时间:2024/04/30 11:08
#include<stdio.h>#define MAX 1005int father[MAX],rank[MAX];int findfather(int a){    if(father[a]==a)        return a;    return father[a]=findfather(father[a]);}void Union(int a,int b){    int fa=findfather(a);    int fb=findfather(b);    if(fa==fb) return;    if(rank[fa]==rank[fb]){        father[fb]=fa;        rank[fa]++;    }    else if(rank[fa]<rank[fb])        father[fa]=fb;    else        father[fb]=fa;}int main(){//    freopen("in.txt","r",stdin);    int N,M,i,a,b;    while(scanf("%d%d",&N,&M)&&N){        memset(rank,0,sizeof(rank));        for(i=1;i<=N;++i) father[i]=i;        for(i=1;i<=M;++i){            scanf("%d%d",&a,&b);            Union(a,b);        }        a=-1;        for(i=1;i<=N;++i){            if(father[i]==i)                ++a;        }        printf("%d\n",a);    }    return 0;}

0 0
原创粉丝点击