• SSLZYC POJ 1611 The Suspects


    题目大意:
    为了防止SARS传染,最好的策略是将患病者与其他人分开。
    在一个学校中,有很多学生群体。在同一组的学生相互联系频繁,和一个学生可以参加几组。为防止SARS传染,学校收集所有学生团体的成员列表,并在他们的规则的标准操作程序。
    一旦某一组中的某一成员是患病者,该组中的所有成员都是患病者。
    轻微有多少学生是患病者?


    思路:
    并查集
    用并查集求出哪些学生是与患病者同组的同学,将这些同学个数相加输出即可。


    代码:

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    int father[30001],n,m,k,x,y,sum;
    
    int find(int x)  //并查集
    {
        return x==father[x]?x:father[x]=find(father[x]);
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        while (n||m)
        {
            sum=0;
            for (int i=0;i<=n;i++)
             father[i]=i;  //初始化
            for (int j=1;j<=m;j++)
            {
                scanf("%d",&k);
                if (k>0) scanf("%d",&x);
                for (int i=2;i<=k;i++)
                {
                     scanf("%d",&y);
                     if (find(x)!=find(y)) father[find(x)]=find(y);  //化为同组的人
                }
            }
            for (int i=0;i<=n;i++)
             if (find(i)==father[0]) sum++;  //记录有多少人与患病者同组
            printf("%d\n",sum);
            scanf("%d%d",&n,&m);
        }
        return 0;
    }
  • 相关阅读:
    6th Alpha阶段的postmortem报告
    两种open()函数
    文件操作权限第一位的0是什么意思
    vi的查找与替换
    浅析Linux下的/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc文件
    Linux命令总结:file
    Linux下/boot目录
    英语单词简记
    Linux下grep命令
    Linux下find命令
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313092.html
Copyright © 2020-2023  润新知