分析:简单并查集应用;
AC code:
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <vector> #include <queue> #include <stack> #include <string> #include <map> using namespace std; #define LL long long #define INF 0x3f3f3f3f const int MAXN=30000+50; int Pre[MAXN]; void init(int n){ for(int i=0;i<=n-1;i++){ Pre[i]=i; } } int Find(int x){ return Pre[x]==x?x:Pre[x]=Find(Pre[x]); } void Combine(int a,int b){ a=Find(a); b=Find(b); if(a!=b) Pre[a]=Pre[b]; } bool issame(int a,int b){ return Find(a)==Find(b); } int main(){ ios::sync_with_stdio(false); cin.tie(0); int n,m; while(cin>>n>>m){ if(n==0&&m==0) break; init(n); while(m--){ int k,a1,a2; cin>>k>>a1; for(int i=2;i<=k;i++){ cin>>a2; Combine(a1,a2); } } int cnt=0; for(int i=0;i<=n-1;i++){ if(issame(i,0)) cnt++; } cout<<cnt<<endl; } return 0; }