1
#include<iostream>
2
using namespace std;
3
#define MAXN 30000
4
#define MAXM 500
5
6
int parent[MAXN];
7
8
void init(int n=MAXN)
9

{
10
int i;
11
for(i=0;i<n;i++)
12
parent[i]=-1;
13
}
14
int find(int x)
15

{
16
if(parent[x]<0)
17
return x;
18
else return parent[x]=find(parent[x]);
19
}
20
21
int Union(int x,int y)
22

{
23
int root1=find(x),
24
root2=find(y);
25
if(root1==root2) return root1;
26
if(parent[root1]<parent[root2])
27
{
28
parent[root1]+=parent[root2];
29
parent[root2]=root1;
30
return root1;
31
}else
{
32
parent[root2]+=parent[root1];
33
parent[root1]=root2;
34
return root2;
35
}
36
}
37
int main()
38

{
39
int n,m,i,j,k,x,root;
40
while( scanf("%d%d",&n,&m)==2 && n!=0 )
41
{
42
init(n);
43
for(i=0;i<m;i++)
44
{
45
scanf("%d",&k);
46
for(j=1;j<=k;j++)
47
{
48
scanf("%d",&x);
49
if(j==1) root=x;
50
root=Union(root,x);
51
}
52
}
53
printf("%d\n",-parent[find(0)]);
54
}
55
return 0;
56
}
posted on 2009-04-22 20:16
wyiu 阅读(194)
评论(0) 编辑 收藏 引用 所属分类:
POJ