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

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

我们。

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

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

信作为前一个字结束。例如,单词“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. Codeforces 1236B. Alice and the List of Presents

    传送门 显然每种礼物是互相独立的,一个礼物的分配不会影响另一个礼物 对于某个礼物 $x$ , 对于每个盒子来说,要么选要么不选,那么可以看成长度为 $m$ 的二进制序列 这个序列第 $i$ 位的数就代 ...

  2. EasyUI_前台js_省市县三级联动

    1.html: <td class="tdl">所属城市</td> <td class="td_detail"> <i ...

  3. 学习笔记--三分法&秦九韶算法

    前言 其实也没什么好说的吧,三分法就是用来求一个单调函数的最值和满足最大值的\(x\),秦九韶算法就是在\(O(N)\)时间内求一个多项式值 怎么用 三分法使用--看这篇:https://www.cn ...

  4. O049、准备 LVM Volume Provider

    参考https://www.cnblogs.com/CloudMan6/p/5597790.html   Cinder 真正负责volume 管理的组件是 volume provider .Cinde ...

  5. nfs服务器的搭建和使用

    目录 更新记录 1.nfs介绍 1.1 nfs概念 1.2 nfs工作原理 1.3 nfs通讯过程 2.搭建和测试 NFS 服务器 2.1 搭建NFS服务器 2.2 测试NFS服务器 3.在线调试:N ...

  6. 13 Django之中间件

    一.什么是中间件 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影 ...

  7. KMS激活的密钥

    今天办公电脑黑屏了,仔细一看,变成了未激活.于是从网上找到了所有Windows版本的GVLK密钥,试了一下完美激活,应该是180天的吧.先用着,等下次过期了再说,哈哈. GVLK密钥是专门用于KMS激 ...

  8. 2019-11-29-解决从旧格式的-csproj-迁移到新格式的-csproj-格式-AssemblyInfo-文件值重复问题...

    title author date CreateTime categories 解决从旧格式的 csproj 迁移到新格式的 csproj 格式 AssemblyInfo 文件值重复问题 lindex ...

  9. linux命令详解——iostat

    简介 iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息.用户可以通过指定统计的次数和时间 ...

  10. 第九章· MySQL的备份和恢复

    一.备份的原因 运维工作的核心简单概括就两件事: 1)第一个是保护公司的数据. 2)第二个是让网站能7*24小时提供服务(用户体验).  备份的原因 1)备份就是为了恢复. 2)尽量减少数据的丢失( ...