B - The Suspects -poj 1611

时间:2023-03-09 03:44:53
B - The Suspects -poj 1611
病毒扩散问题,SARS病毒最初感染了一个人就是0号可疑体,现在有N个学生,和M个团队,只要团队里面有一个是可疑体,那么整个团队都是可疑体,问最终有多少个人需要隔离...
再简单不过的并查集,只需要不断的合并每一行就行可,到最后查询一个所有与0相同的树根就行了
//////////////////////////////////////////////////////////////////
#include<stdio.h>

const int maxn  = 100005;

int f[maxn];
int Find(int x)
{
    if(f[x] != x)
        f[x] = Find(f[x]);
    return f[x];
} int main()
{
    int N, M;     while(scanf("%d%d", &N, &M), N+M)
    {
        int i, u, v, T;         for(i=0; i<N; i++)
            f[i] = i;         while(M--)
        {
            scanf("%d%d", &T, &u);
            u = Find(u);             while(--T)
            {
                scanf("%d", &v);
                v = Find(v);
                f[v] = u;
            }
        }         int ans = 1;
        u = Find(0);         for(i=1; i<N; i++)
        {
            if(Find(i) == u)
                ans++;
        }         printf("%d\n", ans);
    }     return 0;
}