#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; int getpar(int* parent,int a) { if (parent[a]!=a) parent[a]=getpar(parent,parent[a]); return parent[a]; } int main() { int n,m; while (1) { int parent[30005]; int first,last; int counter=0; scanf("%d%d",&n,&m); if (n==0 && m==0) break; int T; int i,j; for (i=0;i<=n-1;i++) parent[i]=i; for (i=1;i<=m;i++) { scanf("%d",&T); scanf("%d",&first); for (j=1;j<=T-1;j++) { scanf("%d",&last); if (getpar(parent,last)!=0) parent[getpar(parent,last)]=getpar(parent,first); else parent[getpar(parent,first)]=getpar(parent,0); first=last; } } for (i=0;i<=n-1;i++) { if (getpar(parent,i)==0) counter++; } cout << counter << endl; } return 0; }
始终将0作为父节点,方便统计,输出有多少个将0作为父节点的人即可。