//并查集,统计不相交集合的元素个数 #include<iostream> using namespace std; int n,m,k,fa[30010],num[30010],x,y; void initSet() { for(int i = 0;i < n;++i) fa[i] = i; } int Find(int x) { if(x == fa[x]) return x; else return fa[x] = Find(fa[x]);//路径压缩 } void Union(int x,int y) { x = Find(x); y = Find(y); if(x != y) { fa[y] = x; num[x] += num[y];//把集合元素个数给加上去 } } int main() { //freopen("in.txt","r",stdin); while(scanf("%d%d",&n,&m) && n) { for(int i = 0;i < n;++i) num[i] = 1;//初始化统计每个集合都只有1个人 initSet(); while(m--) { scanf("%d",&k);k--; scanf("%d",&x); while(k--) { scanf("%d",&y); Union(x,y);//只要是跟X同一个集合的都连上去 } } printf("%d/n",num[Find(0)]);//最后搜索0属于哪个集合,这个集合有多少人 } return 0; }