[Codeforces Round #170 Div. 1] 277A Learning Languages
1 #include<algorithm> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdio> 5 #include<cmath> 6 #include<vector> 7 using namespace std; 8 const int mxn=120; 9 int n,m; 10 int fa[mxn]; 11 vector<int>e[mxn];//记录会每种语言的人 12 bool v[mxn]; 13 int find(int x){ 14 if(fa[x]==x)return x; 15 return fa[x]=find(fa[x]); 16 } 17 int main(){ 18 int i,j; 19 scanf("%d%d",&n,&m); 20 int c,d; 21 bool flag=0; 22 for(i=1;i<=n;i++)fa[i]=i; 23 for(i=1;i<=n;i++){ 24 scanf("%d",&c); 25 if(c)flag=1; 26 for(j=1;j<=c;j++){ 27 scanf("%d",&d); 28 e[d].push_back(i); 29 } 30 } 31 if(!flag){//如果所有人都一门语言也不会说,输出n 32 cout<<n<<endl; 33 return 0;//忘了加return,多WA了3遍,233 34 } 35 for(i=1;i<=m;i++) 36 for(j=1;j<e[i].size();j++){ 37 int x=find(e[i][j]); 38 int y=find(e[i][j-1]); 39 //会说同一种语言的合并起来 40 if(x!=y)fa[x]=y; 41 } 42 for(i=1;i<=n;i++)v[find(i)]=1; 43 int ans=0; 44 for(i=1;i<=n;i++)if(v[i])ans++; 45 printf("%d\n",ans-1); 46 return 0; 47 }
本文为博主原创文章,转载请注明出处。