HDU 1116 Play on Words 并查集
来源:互联网 发布:机械手臂编程软件 编辑:程序博客网 时间:2024/06/05 15:34
HDU 1116 Play on Words
欧拉回路 (并查集)
#include<cstring>#include<iostream>#include<cstdio>#include<cmath>using namespace std;const int MAXN = 30;bool vis[MAXN];int in[MAXN], out[MAXN], bin[MAXN];int findx(int x){ return x==bin[x]?x:findx(bin[x]);//通过三目运算符简化写法
/*
while(bin[x]!=x)
x = bin[x];
return x;
*/
}void join(int a, int b){ int x , y; x = findx(a); y = findx(b); if(x != y) bin[y]=x;}int main(){ int t, n; int l, r, i; char str[1005]; int wordnum, len; int root; bool flag, flag1; int innum, outnum; int start, end; scanf("%d", &t); while(t--) { memset(vis, 0, sizeof(vis)); memset(in, 0 ,sizeof(in)); memset(out, 0, sizeof(out)); for(i=1;i<MAXN;i++) bin[i]=i; flag = flag1 = true; innum = outnum = root = 0; scanf("%d", &wordnum); for(i=1;i<=wordnum;i++) { scanf("%s", str); len = strlen(str); start = str[0] - 'a' + 1; end = str[len-1] - 'a' + 1; vis[start] = true; vis[end] = true; out[start]++; in[end]++; join(start, end); } for(i=1;i<MAXN;i++)//欧拉路径的条件判断入度等于出度, 如果不相等,那就是
//存在小于等于一对in,out互相相差一,否则就是不存在 { if(vis[i]) { if(bin[i]==i) root++; if(in[i]!=out[i]) { if(in[i]-out[i]==1) innum++; else if(out[i]-in[i]==1) outnum++; else flag1=false; } } if(root>1)//最后的根是否只有一个,如果有多个根说明没有遍历完全部的单词 { flag = false; break; } } if(flag&&flag1&&((innum==0&&outnum==0)
||(innum==1&&outnum==1))) printf("Ordering is possible.\n"); else printf("The door cannot be opened.\n"); } return 0;}
0 0
- HDU 1116 Play on Words 并查集
- HDU-1116 Play on Words 并查集
- hdu 1116 Play on Words(欧拉图+并查集)
- HDU 1116 Play on Words (歐拉迴路 + 并查集)
- HDU 1116 Play on Words 【并查集+欧拉图】
- HDU 1116 Play on Words 并查集
- hdu1116 Play on Words--并查集
- Play on Words -- 并查集
- HDU 1116 Play on Words(并查集,欧拉回路)
- hdu 题目1116 Play on Words(并查集 + 欧拉路)
- hdu 1116 Play on Words 并查集+欧拉通路
- 【并查集 欧拉路径】hdu 1116 Play on Words
- hdu 1116 Play on Words(并查集+欧拉回路|| 欧拉路径)
- HDU 1116 && UVA 10129 && POJ 1386 ------ Play on Words(欧拉路径 + 并查集)
- HDU 1116 Play on Words(欧拉路径(有向图)+并查集)
- hdu 1116 Play on Words(并查集求是否所有在一集合里)
- [HDU 1116]Play on Words(欧拉回路/欧拉路径+并查集)
- hdu oj 1116 Play on Words(并查集+欧拉路径)
- CDH5实践(三)Cloudera Manager 5卸载步骤
- java实现函数重载,求最大值!
- unity3d随手记1
- 右下角的弹出框
- android studio Messages乱码解决方法
- HDU 1116 Play on Words 并查集
- 构造函数
- Laravel安装方法 (windows)
- 【NOIP2011 day2】观光公交
- Codeforces 320A - Raising Bacteria(思维)
- android.text.format.DateFormat
- 最大差值问题
- NOIp2008 火柴棒等式
- Spring Boot快速入门