题目链接:点击打开链接
之前做的一个并查集,现在竟然看不懂题意了。
给出同学数n和社团数m,接下来m行前给出同学数k,再给出k个编码。同学编码[0,n-1],已知0号同学已被感染,与之在一个社团的也会被感染,求感染的人数。
//328K 16MS
//C++ 788B
#include <cstdio>
#include <cstring>
int s[30003];
int a[30003];
int n;
void makeset()
{
for(int i=0;i<n;i++)
s[i]=i;
}
int findset(int x)
{
while(s[x]!=x)
{
x=s[x];
}
return x;
}
int main()
{
int m,j,k,i,sum,x;
while(~scanf("%d%d",&n,&m)&&(n||m))
{
sum=0;
makeset();
for(i=0;i<m;i++)
{
scanf("%d",&k);
if(k)
scanf("%d",&a[0]);
for(j=1;j<k;j++)
{
scanf("%d",&a[j]);
s[findset(a[j])]=findset(a[j-1]);
}
}
int y=findset(0);
for(i=0;i<n;i++)
{
if(findset(i)==y)
{
sum++;
}
}
printf("%d\n",sum);
}
}