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

poj 并查集

时间:2016-08-08 19:28:04      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

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

水题

题意:就是找一共有多少个人感染了,0是感染学生的编号。

#include <stdio.h>
#include <string.h>
#define maxn 30005

int m,n;
int belg[ maxn ];

int Find(int x)
{
    int _x=x,_b;
    while( _x != belg[ _x ] )
        _x = belg[ _x ];
    while( x != belg[ x ] )
    {
        _b = belg[ x ];
        belg[ x ] = _x;
        x = _b;
    }
    return _x;
}

void unio(int x,int y)
{
    int root1 = Find(x);
    int root2 = Find(y);
    if( root1 != root2 ) belg[root2] = root1;
}

int main()
{
  //  freopen("in.txt","r",stdin);
    int a,b,c,ans;
    while(scanf("%d%d",&m,&n),m||n)
    {
        for( int i = 0 ; i <= m ; i++ )
            belg[ i ] = i;
        for( int i = 0 ; i < n ; i++ )
        {
            scanf("%d%d",&a,&b);
            for( int j = 0 ; j < a-1 ; j++ )
            {
                scanf("%d",&c);
                unio(b,c);
            }
        }
        ans = 0;
        a = Find(0);
        for(int i = 0 ; i <= m ; i++ )
            if(Find(i)==a) ans++;
        printf("%d\n",ans);
    }
    return 0;
}

 

poj 并查集

标签:

原文地址:http://www.cnblogs.com/Tree-dream/p/5750475.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!