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

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

我们。

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

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

信作为前一个字结束。例如,单词“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. vue 动态添加对象属性

    昨天使用vue发现直接给对象添加属性,并不能触发响应更新,后来看文档发现要通过this.$set 函数动态添加才可用,eg: this.$set( obj, key, data)

  2. 并不对劲的bzoj1972:loj2885:p2482[SDOI2010]猪国杀

    题目大意 只能放链接了. 题目中有一点没说:并不是保证牌够用,而是在牌不够用时反复抽最后一张牌. 题解 发现玩家的数量比较少,所以可以不太在意时间够不够用. 考虑三件事:1.基本操作,如摸牌.出牌.玩 ...

  3. 【原创】大叔经验分享(57)hue启动coordinator时报错

    hue启动coordinator时报错,页面返回undefinied错误框: 后台日志报错: runcpserver.log [13/May/2019 04:34:55 -0700] middlewa ...

  4. (三)创建基于maven的javaFX+springboot项目创建

    创建基于maven的javaFx+springboot项目有两种方式,第一种为通过非编码的方式来设计UI集成springboot:第二种为分离用户界面(UI)和后端逻辑集成springboot,其中用 ...

  5. Java虚拟机-------垃圾回收机机制

    概述 jvm中的堆图 在了解 垃圾回收器 之前,首先得了解一下垃圾回收器的几个名词. 1. 吞吐量CPU 用于运行用户代码的时间与 CPU 总消耗时间的比值.比如说虚拟机总运行了 100 分钟,用户代 ...

  6. day1-css练习[新浪首页顶部栏]

    直接贴代码吧: html代码 <div class="border-01"> <div class="border-001"> < ...

  7. var正在声明变量

    var正在声明变量也可以直接分配一个变量,而不在JS中声明它,但是这种变量在默认情况下是全局的.<!-/->是HTML中的注释,在JS中不起作用.它只是用来忽略无法识别脚本的浏览器的脚本内 ...

  8. TVM调试指南

    1. TVM安装 这部分之前就写过,为了方便,这里再复制一遍. 首先下载代码 git clone --recursive https://github.com/dmlc/tvm 这个地方最好使用--r ...

  9. payload免杀之Installutil.exe&csc.exe利用

    0x00 前言 C#的在Windows平台下的编译器名称是Csc.exe.Installutil.exe工具是一个命令行实用程序,允许您通过执行指定程序集中的安装程序组件来安装和卸载服务器资源,可以执 ...

  10. canvas签名

    <template> <div class="share" style="background:#fff"> <div class ...