poj1386Play on Words(欧拉通路)
来源:互联网 发布:淘宝怎么秒杀 编辑:程序博客网 时间:2024/05/22 10:49
题目: 给你多个单词,问你能不能将所有单词组成这样一个序列:序列的前一个单词的尾字母与后一个单词的头字母相同.
思路:将单词看成有向边,字母看成结点,转化为判断有向图是否有欧拉路。必须满足弱连通,全部顶点度数相同或者有两个点一个入度比出度大一,一个出度比入度大一
#include <cstdio>#include <queue>#include <cstring>#include <iostream>#include <cstdlib>#include <algorithm>#include <vector>#include <map>#include <string>#include <set>#include <ctime>#include <cmath>#include <cctype>using namespace std;#define maxn 100000+10#define LL long longint cas=1,T;int pre[maxn];int in[maxn];int out[maxn];int Find(int x){return pre[x]==-1?x:pre[x]=Find(pre[x]);}int main(){//freopen("in","r",stdin);scanf("%d",&T);while (T--){int n;scanf("%d",&n);memset(pre,-1,sizeof(pre));memset(in,0,sizeof(in));memset(out,0,sizeof(out));for (int i = 0;i<n;i++){ char str[1005];scanf("%s",&str);int u = str[0]-'a';int v = str[strlen(str)-1]-'a'; in[u]++;out[v]++;u = Find(u);v = Find(v);if (u!=v)pre[u]=v;}int cnt = 0;for (int i = 0;i<26;i++)if ((in[i] || out[i]) && Find(i)==i)cnt++;if (cnt>1){puts("The door cannot be opened.");continue;}int c1=0;int c2=0;int c3=0;for (int i = 0;i<26;i++){if (in[i]==out[i])continue;else if (in[i]-out[i]==1)c2++;else if (out[i]-in[i]==1)c3++; elsec1++;}if (((c2==0&&c3==0) || (c2==1&&c3==1)) && c1==0)puts("Ordering is possible.");elseputs("The door cannot be opened.");}//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);return 0;}
0 0
- poj1386Play on Words(欧拉通路)
- POJ1386Play on Words-欧拉回路判定
- 【欧拉回路/通路】 nyoj42 一笔画问题(无向图) && poj1386Play on Words(有向图)
- 10129 - Play on Words//欧拉通路
- 欧拉通路-Play on Words
- poj 2016 Play on Words--欧拉通路
- hdu 1116 Play on Words(欧拉通路)
- POJ 1386 Play on Words(欧拉通路)
- HDU 1116 Play on Words(欧拉通路)
- UVa 10129 Play on Words 欧拉通路
- poj 1386 Play on Words(欧拉通路)
- UVa--10129 Play on Words(欧拉通路)
- UVA10129:Play on Words(欧拉通路存在性)
- ZOJ 2016 Play on Words (HDU 1116)(欧拉回路,欧拉通路)
- ZJU2016 Play on Words - 有向图的欧拉通路
- zoj2016Play on words(判断有向图是否存在欧拉回路通路)
- poj 1386 ZOJ 2016 Play on Words(并查集+欧拉通路)
- hdu 1116 Play on Words 并查集+欧拉通路
- JavaScript菜鸟教程 grammar
- POJ 2590:Steps
- Java抢红包小程序
- Javascript的四种(函数)调用模式
- Ubuntu安装Vim
- poj1386Play on Words(欧拉通路)
- 单链表实现行编辑
- 深入了解windows句柄
- HDU 3001 Travelling(状压DP)
- mycat读写分离与主从切换
- 五模十频
- Objextive-C入门学习1--使用NSLog函数在屏幕上打印HelloWorld
- Behavior的demo——粗仿天猫详情页效果
- 普里姆算法、克鲁斯卡尔算法、最短路径