Uva 10129 Play on Words(欧拉路)
一些秘密的门包含一个非常有趣的单词拼图。考古学家们必须解决的问题
它打开那门。因为没有其他的方式来打开大门,这个谜是非常重要的
我们。
每扇门上都有大量的磁性板。每一个盘子上都有一个字
它。板块必须以这样一种方式排列成一个序列,每一个词都以相同的方式开始
信作为前一个字结束。例如,单词“ACM”可以通过“摩托罗拉”。
你的任务是写一个计算机程序,将读的单词列表,并确定它是否
可以将所有的板按顺序排列(根据给定的规则),从而
打开门.
输入
输入由T测试用例。在输入文件的第一行上给出了它们的数目(t)。
每一个测试用例开始于一个包含一个整数N的行,该数字表示
板(1≤N≤100000)。然后正n行跟随,每一个包含一个字。每一个字
包含至少两个和至多1000个小写字符,这意味着只有字母“A”通过“Z”
出现在单词中。同一个词可能会出现在列表中的几次。
输出
您的程序必须确定是否有可能安排在一个序列中的所有板块,这样
每一个单词的第一个字母等于前一个单词的最后一个字母。所有板块从
列表必须使用,每一个完全一次。几次提到的话一定要用多少次
倍。
如果存在这样一个板块的顺序,你的程序应该打印句子的顺序是
可能。”。否则,输出的句子“门不能打开”。
Sample Input
3
2
acm
ibm
3
acm
malform
mouse
2
ok
ok
Sample Output
The door cannot be opened.
Ordering is possible.
The door cannot be opened.
/*
欧拉路(填之前留下的坑).
单词中间的字母对答案是没有贡献的.
先用性质判断欧拉路连通性.
充必条件是all point度数为0 or
at most two point 度数 为奇数.
然后dfs一遍看连不连通.
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 1001
#define MAXM 27
using namespace std;
int in[MAXM],out[MAXM],tot,n,g[MAXM][MAXM];
char s[MAXN];
bool b[MAXM],flag;
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
void dfs(int u)
{
b[u]=true;
for(int i=1;i<=26;i++)
if(g[u][i]&&!b[i]) dfs(i);
return ;
}
void Clear()
{
tot=0;flag=false;
memset(in,0,sizeof in);
memset(out,0,sizeof out);
memset(g,0,sizeof g);
memset(b,0,sizeof b);
}
int main()
{
int t,l;
t=read();
while(t--)
{
n=read();Clear();
for(int i=1;i<=n;i++)
{
cin>>s;l=strlen(s);
out[s[0]-96]++,in[s[l-1]-96]++;
g[s[0]-96][s[l-1]-96]=true;
}
for(int i=1;i<=26;i++)
if(out[i]!=in[i])
{
if(in[i]==out[i]+1||out[i]==in[i]+1) tot++;
else {flag=true; break; }
}
if(flag||tot>2)
{
printf("The door cannot be opened.\n");continue;
}
for(int i=1;i<=26;i++)
if(out[i])
{
dfs(i);break;
}
for(int i=1;i<=26;i++)
if(!b[i]&&(in[i]||out[i]))
{
printf("The door cannot be opened.\n");
flag=true;
break;
}
if(!flag) printf("Ordering is possible.\n");
}
return 0;
}
Uva 10129 Play on Words(欧拉路)的更多相关文章
- UVA - 10129Play on Words(欧拉路)
UVA - 10129Play on Words Some of the secret doors contain a very interesting word puzzle. The team o ...
- UVA 10129 Play on Words (欧拉通路)
本文链接:http://www.cnblogs.com/Ash-ly/p/5398627.html 题意: 输入N(N <= 100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单 ...
- Uva 10129 - Play on Words 单词接龙 欧拉道路应用
跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...
- UVa 10129 Play On Words【欧拉道路 并查集 】
题意:给出n个单词,问这n个单词能否首尾接龙,即能否构成欧拉道路 按照紫书上的思路:用并查集来做,取每一个单词的第一个字母,和最后一个字母进行并查集的操作 但这道题目是欧拉道路(下面摘自http:// ...
- UVA 10129 Play on Words(欧拉道路)
题意:给你n个字符串,问你是否可以出现一条链,保证链中每个字符串的第一个元素与上一个字符串的最后一个元素相同,注意可能重复出现同一个字符串 题解:以每一个字符串第一个元素指向最后一个元素形成一个有向图 ...
- Play on Words UVA - 10129 欧拉路径
关于欧拉回路和欧拉路径 定义:欧拉回路:每条边恰好只走一次,并能回到出发点的路径欧拉路径:经过每一条边一次,但是不要求回到起始点 ①首先看欧拉回路存在性的判定: 一.无向图每个顶点的度数都是偶数,则存 ...
- 洛谷P1341 无序字母对[无向图欧拉路]
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- POJ1386Play on Words[有向图欧拉路]
Play on Words Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11846 Accepted: 4050 De ...
- hdu1161 欧拉路
欧拉路径是指能从一个点出发能够“一笔画”完整张图的路径:(每条边只经过一次而不是点) 在无向图中:如果每个点的度都为偶数 那么这个图是欧拉回路:如果最多有2个奇数点,那么出发点和到达点必定为该2点,那 ...
随机推荐
- C - 简易贪吃蛇的编写
不多废话,直接进入正题——用C编写简易贪吃蛇.附上拙劣的源码 * c-snake * 首先说明使画面动起来的原理:通过 system("cls"); 清除当前控制台的显示,再pri ...
- vue 模拟测试数据构建
等价=====================================
- ssh无密登录_集群分发脚本xsync
1.ssh免密登录 ssh ip地址 [root@192 ~]# ssh 192.168.1.102 root@192.168.1.102's password: Last login: Mon Fe ...
- IaaS、PaaS、SaaS是云计算的三种服务模式
IaaS.PaaS.SaaS是云计算的三种服务模式 1. SaaS:Software-as-a-Service(软件即服务)提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备 ...
- C#中属性的封装
封装的一般性 封装快捷键:Ctrl+R+E 封装的目的: public修饰的属性,不够安全:private修饰的属性,无法使用所以,用到了封装: 封装就是 隐藏对象的信息,但要流出访问的接口 封装代码 ...
- JS中的SRC
当应用SRC属性时,首先需要创建一个JS文件.为什么不在此文件中使用<script>标记?您可以直接使用输出语句吗?我会分享我的报告一个答案 JS文件不是HTM文件,因此内部不能有HTML ...
- vue-cli3开干
npm install -g @vue/cli-service-global vue create hello-world
- Java学习笔记【十一、序列化】
序列化的条件 实现Serializable接口 所有属性必须是可序列化的,或标记为transient(不做序列化) 序列化-将对象输出为序列化文件 ObjectOutputStream 反序列化-将序 ...
- 第十章、os模块
目录 第十章.os模块 一.os模块 第十章.os模块 一.os模块 方法 详解 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirn ...
- java_day06_java高级特性
Advance Java Programming 第六章: java语言高级特性(part1) 1.static修饰符 1)static变量 在类中,使用static修饰的成员变量,就是静态变量,反之 ...