uva459
来源:互联网 发布:淘宝店铺抓取 编辑:程序博客网 时间:2024/06/05 19:21
#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;int par[500005];int g[500005];int cases;int find_par(int x){ return x==par[x]?x:find_par(par[x]);}void union_(int x,int y){ int a=find_par(x); int b=find_par(y); par[a]=b;}int main(){ cin>>cases; int t=0; getchar(); getchar(); while(cases--) { string s1; getline(cin,s1); int n=s1[0]-'A'+1; memset(g,0,sizeof(g)); for(int i=1; i<=n; i++) par[i]=i; string s; for(int i=0; getline(cin,s)&&s!=""; i++) { int q=s[0]-'A'+1; int p=s[1]-'A'+1; union_(q,p); } for(int i=1; i<=n; i++) par[i]=find_par(i); for(int i=1; i<=n; i++) { int x=par[i]; g[x]++; } int ans=0; for(int i=1; i<=n; i++) if(g[i]) ans++; if(t > 0) cout<<endl; t++; cout << ans << endl; } return 0;}/*110 74 106 46 107 55 13 67 3*/
这题值得注意的是输入输出格式
scanf()读换行的时候只会读一个空格,不会把换行提走,打印的时候也只会打印一个空格。cin不能读换行,也不能提走换行
以后统一用getline(cin,s);格式