Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
1A的菜鸟有话说(附代码)#include<stdio.h> #include<memory.h> int Find(int x,int p[]) { int j,t=x; while(p[x]>=0) x=p[x]; j=x; while(p[t]>=0) { x=p[t]; p[t]=j; t=x; } return j; } void Union(int i,int j,int p[]) { int t=p[i]+p[j]; if(p[i]<p[j]) { p[j]=i; p[i]=t; } else { p[i]=j; p[j]=t; } } int cal(char ch) { if(ch>='a') return ch-'a'; else return ch-'A'+26; } int main() { // freopen("test.txt","r",stdin); char str[10],hash[53]; int i,degree[52],p[52],s,a,b,c,d,cnt1,cnt2; while(~scanf("%s",str)) { cnt1=cnt2=0; memset(hash,0,sizeof(hash)); memset(degree,0,sizeof(degree)); memset(p,-1,sizeof(p)); while(scanf("%s",str),str[0]!='{'); while(scanf("%s",str),str[0]!='}') { s=cal(str[0]); hash[s]=1; } while(scanf("%s",str),str[0]!='{'); while(scanf("%s",str),str[0]!='}') { a=cal(str[1]); b=cal(str[3]); degree[a]++; degree[b]++; if(a!=b&&(c=Find(a,p))!=(d=Find(b,p))) Union(c,d,p); } for(i=0;i<52;i++) { if(hash[i]&&p[i]<0&°ree[i]>0) cnt1++;//trick,小心孤立顶点 if(degree[i]%2) cnt2++; if(cnt2>2||cnt1>1) break; } if((cnt1==1&&cnt2==2)||(!cnt1&&!cnt2)) printf("Yes "); else printf("No "); if(cnt1<=1&&!cnt2) printf("Yes\n"); else printf("No\n"); } return 0; } //一定要注意有可能某些点上木有边啊,因为这是给定顶点集再给边,不是给边生成顶点集,这个一定要注意! Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator