码迷,mamicode.com
首页 > 其他好文 > 详细

poj -1611 The Suspects

时间:2014-08-24 14:16:02      阅读:166      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!