#include<stdio.h>
#define M 30005
int father[M];
int num[M];
int find(int v)
{
if(father[v]==v)
return v;
father[v]=find(father[v]);
return father[v];
}
void Union(int u,int v)
{
int x=find(v);
int y=find(u);
if(x!=y)
{
father[x]=y;
num[y]+=num[x];
}
}
int main()
{
int n,m,i,j;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0)
break;
for(i=0;i<n;i++)
{
father[i]=i;
num[i]=1;
}
for(i=0;i<m;i++)
{
int k,first,t;
scanf("%d%d",&k,&first);
for(j=1;j<k;j++)
{
scanf("%d",&t);
Union(first,t);
}
}
printf("%d\n",num[ find(0) ]);
}
return 0;
}
#define M 30005
int father[M];
int num[M];
int find(int v)
{
if(father[v]==v)
return v;
father[v]=find(father[v]);
return father[v];
}
void Union(int u,int v)
{
int x=find(v);
int y=find(u);
if(x!=y)
{
father[x]=y;
num[y]+=num[x];
}
}
int main()
{
int n,m,i,j;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0)
break;
for(i=0;i<n;i++)
{
father[i]=i;
num[i]=1;
}
for(i=0;i<m;i++)
{
int k,first,t;
scanf("%d%d",&k,&first);
for(j=1;j<k;j++)
{
scanf("%d",&t);
Union(first,t);
}
}
printf("%d\n",num[ find(0) ]);
}
return 0;
}
624

被折叠的 条评论
为什么被折叠?



