zoukankan      html  css  js  c++  java
  • poj the suspects 1611

    题目链接:http://poj.org/problem?id=1611

    题目大意:

    有一个学校,有N个学生,编号为0-N-1,现在0号学生感染了非典,凡是和0在一个社团的人就会感染,并且这些人如果还参加了别的社团,他所在的社团照样全部感染,求感染的人数。

    这道题是并查集的题目。没什么好多说的比较简单~

    #include<stdio.h>
    int set[30005],h[30005],num[30005];
    void init(int m)
    {
        int i;
        for(i = 0;i < m;i++)
        {
            set[i] = i;
            h[i] = 0;
            num[i] = 1;
        }
    }
    int find(int x)//怕数据比较大所以直接用的循环,如果用栈的话会可能会出现re
    {
        int r= x;
        while(set[r] != r)
        {
            r = set[r];
        }
        return r;
    }
    
    void merge(int a,int b)
    {
        a = find(a);
        b = find(b);
        if(a == b)//这部一定要有,我因为这个wa了一次
            return;
        if(h[a] == h[b])
            h[a] = h[a]+1,set[b] = a,num[a] += num[b];
        else if(h[a] < h[b])
            set[a] = b,num[b] += num[a];
        else
            set[b] = a,num[a] += num[b];
    }
    int main()
    {
        int n,m,i,j,t,a,b;
        while(scanf("%d %d",&n,&m)&&n||m)
        {
            init(n);
    
            if(!m)
                printf("1\n");
            else
            {
            while(m--)
            {
    
                scanf("%d",&t);
                for(scanf("%d",&a),i = 1;i < t;i++)//嘿嘿,跟网上雪莱的~
                {
                    scanf("%d",&b);
                    merge(a,b);
                }
            }
            
            printf("%d\n",num[find(0)]);
            }
            
        }
        return 0;
    }
  • 相关阅读:
    通过注册表获取计算机相关信息
    GetTickCount()函数
    SystemInfo获取计算机相关信息
    CriticalSection 临界区
    mysql慢查询问题
    mysql show processlist详解
    nginx及php版本号隐藏
    安装psutil模块报错&安装python-devel
    ubuntu ssh重启
    php-fpm配置优化
  • 原文地址:https://www.cnblogs.com/0803yijia/p/2594470.html
Copyright © 2011-2022 走看看