用continue语句会超时,所以以后少用这种破坏程序结构的控制语句吧。。。
P.S. 明天的省队选拔我去打酱油。
/*
* the suspects
* mike-w
* 2012-4-27
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SET_SIZE 33333
int set[SET_SIZE],rank[SET_SIZE],card[SET_SIZE];
int N,M;
int set_init(int size)
{
int i;
for(i=0;i<size;i++)
set[i]=i,rank[i]=1,card[i]=1;
return 0;
}
int set_find(int e)
{
if(set[e]==e)
return e;
else
return set[e]=set_find(set[e]);
}
int set_merge(int e1, int e2)
{
int r1=set_find(e1);
int r2=set_find(e2);
if(r1==r2)
return -1;
if(rank[r1]<rank[r2])
set[r1]=r2,rank[r1]=r2,card[r2]+=card[r1];
else if(rank[r1]>rank[r2])
set[r2]=r1,rank[r2]=r1,card[r1]+=card[r2];
else
set[r1]=r2,rank[r2]++,card[r2]+=card[r1];
return 0;
}
int main(void)
{
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
#endif
int i,k,t1,t2;
while(scanf("%d%d",&N,&M),N||M)
{
set_init(N);
while(M-->0)
{
scanf("%d",&k);
if(k)
scanf("%d",&t1);
for(i=2;i<=k;i++)
scanf("%d",&t2),set_merge(t1,t2);
}
printf("%d\n",card[set_find(0)]);
}
return 0;
}