给你 n个人 编号 0 --- n-1 之后有 m 个集合
问最后有多少个人 和 0 号接触过。。水题。。。8多说了
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn = 1e5+5;
int pre[maxn];int n, m, k;
inline int find(int x){return x==pre[x]?x:find(pre[x]);}
inline void init(int n){for(int i=0;i<n;i++){pre[i] = i;}}
int main()
{
while(~scanf("%d%d",&n,&m) && (n || m))
{
init(n);
int a,b;
if(m == 0){printf("1\n");continue;}
while(m--)
{
scanf("%d", &k);k--;
scanf("%d", &a);a = find(a);
while(k--)
{
scanf("%d", &b);
b = find(b);
pre[b] = a;
}
}
int ans = 0, x = find(0);
for(int i=0; i<n; i++)if(find(i) == x) ans++;
printf("%d\n", ans);
}
return 0;
}