题目链接: http://acm.pku.edu.cn/JudgeOnline/problem?id=1611 #include <stdio.h> #define MAX_STUDENT 30000 int parent[MAX_STUDENT]; int num[MAX_STUDENT]; void make_set(int x){ parent[x] = x; num[x] = 1; } int find_set(int x){ if(x != parent[x]) parent[x] = find_set(parent[x]); return parent[x]; } void union_set(int x,int y){ x = find_set(x); y = find_set(y); if(x == y) return; if(num[x] <= num[y]){ parent[x] = y; num[y] += num[x]; } else{ parent[y] = x; num[x] += num[y]; } } int main(){ int n,m; int k,first,member; int i,j; while(scanf("%d%d",&n,&m)){ if(n == 0 && m == 0) break; for(i = 0;i < n;i++) make_set(i); for(j = 0;j < m;j++){ scanf("%d%d",&k,&first); for(i = 0;i < k - 1;i++){ scanf("%d",&member); union_set(first,member); } } printf("%d/n",num[find_set(0)]); } return 0; }