题意  见下方中文翻译

每一个单词能够看成首尾两个字母相连的一条边  然后就是输入m条边  推断是否能构成有向欧拉通路了

有向图存在欧拉通路的充要条件:

1. 有向图的基图连通;

2.
全部点的出度和入度相等  或者  仅仅有两个入度和出度不相等的点  且这两点入度与出度的差一个为-1(起点)一个为1(终点).

推断是否连通就是应用并查集了

#include<cstdio>
#include<cstring>
using namespace std;
const int N = 30, M = 100010;
struct edge{int u, v; } e[M];
int vis[N], in[N], out[N], par[N], m, ok; int Find(int x)
{
int r = x, tmp;
while(par[r] >= 0) r = par[r];
while(x != r)
{
tmp = par[x];
par[x] = r;
x = tmp;
}
return r;
} void Union(int u, int v)
{
int ru = Find(u), rv = Find(v), tmp = par[ru] + par[rv];
if(par[ru] < par[rv]) par[rv] = ru, par[ru] = tmp;
else par[ru] = rv, par[rv] = tmp;
} void connect()
{
memset(par, -1, sizeof(par)); //初始化并查集
for(int i = 0; i < m; ++i)
{
int u = e[i].u, v = e[i].v;
if(Find(u) != Find(v)) Union(u, v);
}
for(int i = 0; i < 26; ++i)
for(int j = 0; j < 26; ++j)
if(vis[i] && vis[j] && Find(i) != Find(j)) ok = 0;
} int main()
{
char s[1005];
int u, v, cas;
scanf("%d", &cas);
while(cas--)
{
for(int i = 0; i < 26; ++i)
vis[i] = in[i] = out[i] = 0;
scanf("%d", &m);
for(int i = 0; i < m; ++i)
{
scanf("%s", s);
u = s[0] - 'a', v = s[strlen(s) - 1] - 'a';
vis[u] = vis[v] = 1;
e[i].u = u, e[i].v = v;
++in[u], ++out[v];
} int id = 0, od = 0;//i[d]记录入度比出度大1的点的个数 o[d]小1
ok = 1;
for(int i = 0; i < 26; ++i)
{
if(!vis[i]) continue;
int k = in[i] - out[i];
if(k < -1 || k > 1) {ok = 0; break;}
if(k == 1) ++id;
if(k == -1) ++od;
}
if(id > 1 || od > 1 || id - od) ok = 0;
connect();
if(ok) printf("Ordering is possible.\n");
else printf("The door cannot be opened.\n");
}
return 0;
}

题目描写叙述: 

有些秘门带有一个有趣的词迷。考古学家必须解开词迷才干打开门。因为没有其它方法能够 打开门,因此词迷就变得非常重要。 每一个门上有很多磁盘。每一个盘上有一个单词,这些磁盘必须又一次排列使得每一个单词第一个字 母跟前一个单词后一个字母同样。比如单词"acm"能够跟在单词"motorola"的后面。

你的任务是 编写一个程序,读入一组单词。然后判定能否够经过重组使得每一个单词第一个字母跟前一个单 词后一个字母同样。这样才干打开门。

输入描写叙述:

输入文件里包括 T 个測试数据。输入文件的第一行就是 T,接下来是 T 个測试数据。

每一个測 试数据的第一行是一个整数 N,表示单词的个数(1≤N≤100000);接下来有 N行。每行是一个 单词。每一个单词至少有 2个、至多有 1000 个小写字母,即单词中仅仅可能出现字母'a'~'z';在同一 个測试数据中,一个单词可能出现多次。

输出描写叙述:

假设通过重组单词能够达到要求,输出"Ordering is possible.",否则输出"The door cannot be opened."。

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.

POJ 1386 Play on Words(有向欧拉通路 连通图)的更多相关文章

  1. POJ 1300 欧拉通路&欧拉回路

    系统的学习一遍图论!从这篇博客开始! 先介绍一些概念. 无向图: G为连通的无向图,称经过G的每条边一次并且仅一次的路径为欧拉通路. 如果欧拉通路是回路(起点和终点相同),则称此回路为欧拉回路. 具有 ...

  2. poj 2513 连接火柴 字典树+欧拉通路 好题

    Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 27134   Accepted: 7186 ...

  3. Colored Sticks POJ - 2513 并查集+欧拉通路+字典树hash

    题意:给出很多很多很多很多个棒子 左右各有颜色(给出的是单词) 相同颜色的可以接在一起,问是否存在一种 方法可以使得所以棒子连在一起 思路:就是一个判欧拉通路的题目,欧拉通路存在:没奇度顶点   或者 ...

  4. POJ 2513 无向欧拉通路+字典树+并查集

    题目大意: 有一堆头尾均有颜色的木条,要让它们拼接在一起,拼接处颜色要保证相同,问是否能够实现 这道题我一开始利用map<string,int>来对颜色进行赋值,好进行后面的并查操作以及欧 ...

  5. poj2513- Colored Sticks 字典树+欧拉通路判断

    题目链接:http://poj.org/problem?id=2513 思路很容易想到就是判断欧拉通路 预处理时用字典树将每个单词和数字对应即可 刚开始在并查集处理的时候出错了 代码: #includ ...

  6. ACM/ICPC 之 DFS求解欧拉通路路径(POJ2337)

    判断是欧拉通路后,DFS简单剪枝求解字典序最小的欧拉通路路径 //Time:16Ms Memory:228K #include<iostream> #include<cstring& ...

  7. hdu1116有向图判断欧拉通路判断

    Play on Words Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  8. 欧拉回路&欧拉通路判断

    欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次, 称这条回路为欧拉回路.具有欧拉回路的图成为欧拉图. 判断欧拉通路是否存在的方法 ...

  9. POJ2513Colored Sticks(欧拉通路)(字典树)(并查集)

                                                             Colored Sticks Time Limit: 5000MS   Memory ...

随机推荐

  1. rabbitmq 简单示例(Hello World)

    一:消息中间件: AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计 RabbitMQ是实现AMQP( ...

  2. ElasticSearch学习笔记--安装

    1.安装ElasticSearch https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html 这 ...

  3. JSP学习笔记 - 内置对象 Response

    1.response.addHeader("refresh","2"): 制定页面刷新时间 2.response.addHeader("refresh ...

  4. discuz x3论坛搬家换虚拟主机完美使用教程 亲测可行 附操作步骤

    第一步:备份网站数据进入后台—站长—数据库—备份,数据备份类型选择“Discuz!和 UCenter数据”,备份成功以后,数据自动保存在data文件夹下. 第二步:网站文件下载 把整个网站文件打包(虚 ...

  5. HFS模板开发

    痉挛模板, 节, 符号 & 变量帮助需要更多帮助 吗?看看 下面这些链接-模板是模型痉挛用于构建 HTML 页面. -它分为几个部分, 每个部分描述最终 HTML 页面的一部分. -此模板必须 ...

  6. freemarker使用map替换ftl中相关值

    ftl文件demo01.ftl <html> <head> <title>Welcome!</title> </head> <body ...

  7. Python 操作excel day5

    一.Python操作excel python操作excel使用xlrd.xlwt和xlutils模块 1.xlrd模块是读取excel的: 2.xlwt模块是写excel的: 3.xlutils是用来 ...

  8. Spring资源访问接口Resource

    该接口拥有对不同资源类型的实现类 boolean exists() 资源是否存在 boolean isOpen() 资源是否打开 URL getURL() 如果底层资源可以表示成URL,则该方法返回对 ...

  9. xmpp 消息和好友上下线(3)

    原始地址:XMPPFrameWork IOS 开发(四) 消息 //收到消息 - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XM ...

  10. 2018NOIP普及T4---对称二叉树

    题目 对称二叉树   题目描述 思路 检查是否符合对称条件 条件很简单——结构对称&&点权对称 要做到点权对称其实也就顺便结构对称了 于是条件可以简化为点权对称 可以考虑并行搜索 bo ...