思路:0是传染源,问和0有关系的数字有多少个,直接或者间接
#include<iostream>
#include<cstdio>
using namespace std;
int a[30010],f[30010],book[30010];
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
void merge(int v,int u)
{
int x=find(v);
int y=find(u);
if(x!=y)
{
f[y]=x;
book[x]+=book[y];
}
}
int main()
{
int n,m,t;
while(scanf("%d%d",&n,&m)&&n+m)
{
for(int i=0;i<=n;i++)
{
book[i]=1;
f[i]=i;
}
for(int i=1;i<=m;i++)
{
scanf("%d",&t);
for(int j=1;j<=t;j++) scanf("%d",&a[j]);
for(int j=1;j<t;j++) merge(a[j],a[j+1]);
}
printf("%d\n",book[find(0)]);
}
return 0;
}