首页 > 其他 > 详细

poj -1611 The Suspects

时间:2014-08-24 14:16:02      阅读:297      评论:0      收藏:0      [点我收藏+]

http://poj.org/problem?id=1611

题意是说为了控制病毒,需要收集全部病人的信息,然后有n个人和m个组,初始0号人是病毒,满足一个组只要有一个人是病毒,那么这个组全部的人都认为有病毒。问最终感染病毒的人数。

并查集来实现,只要输出0所在祖先节点的秩就行,秩保存的就是该节点所有的儿子数。

#include<cstdio>
#define N 300001
int father[N],sz[N],f[N];
int find(int x)
{
    if(x==father[x]) return x;
    father[x]=find(father[x]);
    return father[x];
}

void Union(int x,int y)
{
    int a=find(x);
    int b=find(y);
    if(a==b) return;

    if(sz[a]>sz[b])
    {
        father[b]=a;
        sz[a]+=sz[b];
    }
    else
    {
        father[a]=b;
        sz[b]+=sz[a];
    }
}
int main()
{
    int n,m,k,a,b,i,j;
    while(scanf("%d%d",&n,&m)!=EOF&&n+m)
    {
        for(i=0;i<n;i++)
        {
            father[i]=i;
            sz[i]=1;
        }
        for(i=1;i<=m;i++)
        {
            scanf("%d",&k);
            scanf("%d",&f[0]);
            for(j=1;j<k;j++)
            {
                scanf("%d",&f[j]);
                Union(f[j-1],f[j]);
            }
        }
         printf("%d\n",sz[find(0)]);
    }
    return 0;
}


 

poj -1611 The Suspects

原文:http://blog.csdn.net/u012773338/article/details/38794793

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!