hdu1116 Play on Words(典型欧拉回路)
来源:互联网 发布:js怎么给控件赋值 编辑:程序博客网 时间:2024/06/10 03:18
题意:所给n个单词是否连成一串(类似成语接龙)
分析:判断单联通的欧拉回路,使用并差集判断单联通性,然后判欧拉即可
#include<iostream>#include<cstdio>#include<cstring>#include<string>using namespace std;const int MAXN=30;int in[MAXN];int out[MAXN];int done[MAXN];int fa[MAXN];void init(){memset(done,0,sizeof done);memset(in,0,sizeof in);memset(out,0,sizeof out);int i;for(i=0;i<MAXN;i++)fa[i]=i;}int _find(int x){if(x!=fa[x])return fa[x]=_find(fa[x]);return x;}bool solve(){int i,r=0,a=0,b=0,c=0;for(i=0;i<MAXN;i++)if(done[i]&&fa[i]==i)r++;if(r>1)return 0;for(i=0;i<MAXN;i++)if(done[i]&&in[i]!=out[i]){if(in[i]==out[i]+1)a++;else if(in[i]+1==out[i])b++;else c++;}if(c)return 0;if(a==1&&b==1||a==0&&b==0)return 1;return 0;}int main(){char s[1300];int T,n;cin>>T;while(T--){scanf("%d",&n);init();while(n--){scanf("%s",s);int c1=s[0]-'a';int c2=s[strlen(s)-1]-'a';in[c2]++;out[c1]++;int x=_find(c1);int y=_find(c2);done[c1]=done[c2]=1;if(x!=y)fa[x]=y;}if(solve())printf("Ordering is possible.\n");else printf("The door cannot be opened.\n");}return 0;}
0 0
- hdu1116 Play on Words(典型欧拉回路)
- hdu1116—Play on Words(欧拉回路)
- hdu1116 Play on Words 判断能否构成欧拉回路
- HDU1116-Play On Words 并查集,欧拉回路
- ZOJ2016 POJ1386 HDU1116 Play on Words,欧拉路径及欧拉回路
- UVA10129 POJ1386 HDU1116 ZOJ2016 Play on Words【欧拉回路+并查集】
- HDU1116(Play On Words)可做欧拉回路模板
- HDU1116(Play on Words)
- POJ Play on Words(欧拉回路)
- poj1386 Play on Words (欧拉回路)
- (欧拉回路)Play on Words(P1386)
- Play on Words UVa欧拉回路
- HDU 1116 Play on Words(欧拉回路)
- HDU 1116 Play on Words (欧拉回路)
- (欧拉回路) hdu 1116 Play on Words
- (欧拉回路)uva 10129 Play On Words
- UVA - 10129 Play on Words (欧拉回路)
- Play on Words(欧拉回路+并查集)
- Oracle并行检索
- -机器学习算法-最小二乘法与回归[4]
- 复制构造函数
- 二:redis 的hash类型相关操作
- 开发中很实用的10个效果
- hdu1116 Play on Words(典型欧拉回路)
- 类的特殊数据成员
- nyoj546Divideing Jewels(多重背包)
- C 文件操作及相关函数
- PHP把时间转换成几分钟前、几小时前、几天前的几个函数、类分享
- java中判断素数的六种方法
- 三:redis的List类型相关操作
- Python识别web验证码
- VS学习,遇到错误“ResGen.exe”已退出