aoj连通图判断集合个数

来源:互联网 发布:疯狂粤语 粤知一二 编辑:程序博客网 时间:2024/06/05 00:38

题目链接http://icpc.ahu.edu.cn/OJ/ContestProblem.aspx?cid=46&id=528

和夺宝奇兵一样也是统计集合的个数

代码如下

#include<stdio.h> int father[1005];int set[1005];int getfather(int x){    if(x!=father[x])        father[x]=getfather(father[x]);    return father[x];} void add(int x,int y){    int fx=getfather(x);    int fy=getfather(y);    if(fx!=fy)        father[fx]=fy;} int main(){    int i,n,m,a,b;    while(scanf("%d%d",&n,&m)!=EOF)    {        int ans=0;        memset(set,0,sizeof(set));        for(i=1;i<=n;i++)            father[i]=i;        for(i=0;i<m;i++)        {            scanf("%d%d",&a,&b);            add(a,b);        }        for(i=1;i<=n;i++)        {            int t=getfather(i);            set[t]=1;        }        for(i=1;i<=n;i++)        {            ans+=set[i];        }        printf("%d\n",ans-1);    } }


0 0
原创粉丝点击