hdu 1232 畅通工程(并查集)

来源:互联网 发布:程序员用什么键盘好 编辑:程序博客网 时间:2024/06/02 03:14

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1232

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int maxn=1005;int father[maxn],ans[1005];int find(int x){     //查找并认爸爸    if(x!=father[x])        father[x]=find(father[x]);    return father[x];}void Union(int x,int y){   //x的爸爸是y    int a=find(x);    int b=find(y);    if(a==b)        return;    father[a]=b;}int main(){    int n,m,a,b;    while(scanf("%d%d",&n,&m)==2&&n){        fill(ans,ans+maxn,0);        fill(father,father+maxn,0);        for(int i=1;i<=n;i++){            father[i]=i;        }        for(int i=0;i<m;i++){            scanf("%d%d",&a,&b);            if(a>b)                swap(a,b);            Union(a,b);        }        int cnt=0;        for(int i=1;i<=n;i++){            ans[find(i)]++;        }        for(int i=1;i<=n;i++){            if(ans[i])                cnt++;        }        cnt--;        if(cnt<0)            printf("0\n");        else            printf("%d\n",cnt);    }    return 0;}


原创粉丝点击