HDU 1232 畅通工程

并查集……

#include <cstdio>

int f[1005],q,w,n,m;

int sf(int x){return x==f[x]?x:f[x]=sf(f[x]);}

int main(){

    while(~scanf("%d",&n)){

        if(n==0)break; 

        scanf("%d",&m);

        for(int i=1;i<=n;i++)f[i]=i;

        for(int i=0;i<m;i++){

            scanf("%d%d",&q,&w);

            f[sf(q)]=sf(w);

        }int ans=-1;

        for(int i=1;i<=n;i++)if(f[i]==i)ans++;

        printf("%d\n",ans);

    }

    return 0;

}

你可能感兴趣的:(HDU)