int f[30010]; int n,m;
int getf(int x) { if(x == f[x]) return x; return (f[x] = getf(f[x])); }
void merge(int a, int b) { a = getf(a); b = getf(b); if(a != b) { if(b == 0) f[a] = b; else if(a == 0) f[b] = a; else f[b] = a; } }
int main() { int a,b,k,res; while(scanf(“%d %d”,&n,&m) && n) { res = 0; for(int i = 0; i < n; ++i) f[i] = i; for(int i = 0; i < m; ++i) { scanf(“%d %d”,&k,&a); for(int j = 1; j < k; ++j) { scanf(“%d”,&b); merge(a,b); } } //本来以为这样会超时呢,没想到才16M for(int i = 0; i < n; ++i) if(getf(i) == 0) ++res; PRintf(“%d/n”,res); } return 0; }
新闻热点
疑难解答