一些秘密的门包含一个非常有趣的单词拼图。考古学家们必须解决的问题

它打开那门。因为没有其他的方式来打开大门,这个谜是非常重要的

我们。

每扇门上都有大量的磁性板。每一个盘子上都有一个字

它。板块必须以这样一种方式排列成一个序列,每一个词都以相同的方式开始

信作为前一个字结束。例如,单词“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(欧拉路)的更多相关文章

  1. UVA - 10129Play on Words(欧拉路)

    UVA - 10129Play on Words Some of the secret doors contain a very interesting word puzzle. The team o ...

  2. UVA 10129 Play on Words (欧拉通路)

    本文链接:http://www.cnblogs.com/Ash-ly/p/5398627.html 题意: 输入N(N <= 100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单 ...

  3. Uva 10129 - Play on Words 单词接龙 欧拉道路应用

    跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...

  4. UVa 10129 Play On Words【欧拉道路 并查集 】

    题意:给出n个单词,问这n个单词能否首尾接龙,即能否构成欧拉道路 按照紫书上的思路:用并查集来做,取每一个单词的第一个字母,和最后一个字母进行并查集的操作 但这道题目是欧拉道路(下面摘自http:// ...

  5. UVA 10129 Play on Words(欧拉道路)

    题意:给你n个字符串,问你是否可以出现一条链,保证链中每个字符串的第一个元素与上一个字符串的最后一个元素相同,注意可能重复出现同一个字符串 题解:以每一个字符串第一个元素指向最后一个元素形成一个有向图 ...

  6. Play on Words UVA - 10129 欧拉路径

    关于欧拉回路和欧拉路径 定义:欧拉回路:每条边恰好只走一次,并能回到出发点的路径欧拉路径:经过每一条边一次,但是不要求回到起始点 ①首先看欧拉回路存在性的判定: 一.无向图每个顶点的度数都是偶数,则存 ...

  7. 洛谷P1341 无序字母对[无向图欧拉路]

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...

  8. POJ1386Play on Words[有向图欧拉路]

    Play on Words Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11846   Accepted: 4050 De ...

  9. hdu1161 欧拉路

    欧拉路径是指能从一个点出发能够“一笔画”完整张图的路径:(每条边只经过一次而不是点) 在无向图中:如果每个点的度都为偶数 那么这个图是欧拉回路:如果最多有2个奇数点,那么出发点和到达点必定为该2点,那 ...

随机推荐

  1. 网易Java程序员两轮面试,这些问题你能答对几个?

    一转眼,2018 年已经过去了,你是否在满意的公司?拿着理想的薪水? 虽然"钱多.事少.离家近"的工作可能离技术人比较远,但是找到一份合适的工作,其实并不像想象中那么难.但是,有些 ...

  2. go 拼接sql

    //原文链接:https://www.jianshu.com/p/a0569157c418 golang mysql拼接子查询 使用fmt.Sprintf拼接SQL 实例代码 func Select( ...

  3. 并不对劲的复健训练-bzoj5250:loj2473:p4365:[九省联考2018]秘密袭击

    题目大意 有一棵\(n\)(\(n\leq 1666\))个点的树,有点权\(d_i\),点权最大值为\(w\)(\(w\leq 1666\)).给出\(k\)(\(k\leq n\)),定义一个选择 ...

  4. linux 阿里云 新机器 安装jdk1.8

    2019年7月17日15:58:34 按着顺序来: wget https://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4f ...

  5. 实现a标签按钮完全禁用

    前言 最近在开发时遇见一个问题 我们知道a标签的disabled属性部分浏览器支持,但是尽管设置了disabled属性也无法阻挡任何鼠标经过或是点击事件的,那么如何实现a标签按钮的禁用呢? 转换一下思 ...

  6. webpack提取公共js代码

    webpack打包js代码与提取公共js代码分析 webpack提取公共js代码示例 一.分析 webpack默认打包js代码时,是将从入口js模块开始,将入口js模块所依赖的js以及模块逐层依赖的模 ...

  7. css,使两个在同一行内的display:inline-block的div顶部对齐。

    两个都加上:vertical-align:top;

  8. elementUI使用实录

    新项目开发用到了elementUI,但是对这个虽然会用,但是细枝末节的东西每次都需要看官方文档才能想起来怎么用,故,记之. 1.form表单 -- 表单验证 在防止用户犯错的前提下,尽可能让用户更早地 ...

  9. HBuilderX 打包

    新建 - 云打包 (密钥 密码看不到 - 回车)    (  ) BlueStacks蓝叠 模拟器看效果

  10. 3.Hibernate基础配置

    1.Hibernate.cfg.xml:hbm2ddl.auto 在SessionFactory创建时,自动检查数据库结构,或者将数据库schema的DDL导出到数据库 <property na ...