题意:给你一些字符串,这些字符串可以首位相接(末位置如果和另一个字符串的首位置相同的话就可以相连) 。然后问你是否可以全部连起来。

思路:就是取出每个字符串的首尾位置,然后求出出度和入度,根据有向欧拉通路的性质,可以求出是否可以组成欧拉通路 。

当然还得考虑一下这个图是否是连通图,这里可以用并查集记录边的集合。最后判断是否是一个连通图。

欧拉通路水题。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define clr(a) memset(a , 0 , sizeof(a) )
using namespace std ; char a[1111] ;
struct kdq{
int s, e ;
}al[111111] ;
int in[30] ,out[30] ;
bool vis[30] ; int fa[30] ;
int find(int x){
return fa[x] == x ? x : fa[x] = find(fa[x]) ;
} void Union(int a, int b){
a = find(a) ;
b = find(b) ;
if(a == b)return ;
if(a < b)fa[b] = a ;
else fa[a] = b ;
} void init(){
for (int i = 0 ; i <= 26; i ++ )fa[i] = i ;
clr(in) ;
clr(out) ;
clr(vis) ;
} int main(){
int T ;
cin >> T ;
while( T -- ){
int n ;
cin >> n ;
init() ; for (int i = 1 ; i <= n ; i ++ ){
scanf("%s",a) ;
int l = strlen(a) ;
al[i].s = a[0] - 'a';
al[i].e = a[l - 1] - 'a';
in[a[0] - 'a'] ++ ;
out[a[l - 1] - 'a'] ++ ;
vis[a[0] - 'a'] = 1 ;
vis[a[l - 1] - 'a'] = 1 ;
}
for (int i = 1 ; i <= n ; i ++ ){
int u = al[i].s ;
int v = al[i].e ;
Union(u , v) ;
}
int jihe = -1 ;
bool flag = 0 ;
for (int i = 0 ; i < 26 ; i ++ ){
if(!vis[i])continue ;
if(jihe == -1){
jihe = find(i) ;
}
else if(find(i) != jihe){
flag = 1 ;
break ;
}
}
int num = 0 ;
for (int i = 0 ; i < 26 ;i ++ ){
if(!vis[i])continue ;
if(abs(in[i] - out[i]) >= 2){
flag = 1 ;
break ;
}
else if(abs(in[i] - out[i]) == 1){
num ++ ;
}
}
if(flag){
puts("The door cannot be opened.") ;
}else
if(num == 0 || num == 2 ){
puts("Ordering is possible.") ;
}else {
puts("The door cannot be opened.") ;
}
}
return 0 ;
}

POJ 1386 有向图欧拉通路的更多相关文章

  1. HDU1116 Play on Words(有向图欧拉通路)

    我把单词当作点,然后这样其实是不对的,这样就要判定是否是哈密顿通路.. 这题应该把单词的首尾单词当作点,而单词本身就是边,那样就是判定欧拉通路了. 有向图包含欧拉通路的充要条件是:首先基图连通,然后是 ...

  2. POJ 2337 Catenyms(有向图的欧拉通路)

    题意:给n个字符串(3<=n<=1000),当字符串str[i]的尾字符与str[j]的首字符一样时,可用dot连接.判断用所有字符串一次且仅一次,连接成一串.若可以,输出答案的最小字典序 ...

  3. Poj 2337 Catenyms(有向图DFS求欧拉通路)

    题意: 给定n个单词, 问是否存在一条欧拉通路(如acm,matal,lack), 如果存在, 输出字典序最小的一条. 分析: 这题可以看作http://www.cnblogs.com/Jadon97 ...

  4. POJ 1780 Code(有向图的欧拉通路)

    输入n(1<=n<=6),输出长度为10^n + n -1 的字符串答案. 其中,字符串以每n个为一组,使得所有组都互不相同,且输出的字符串要求字典序最小. 显然a[01...(n-1)] ...

  5. 欧拉通路-Play on Words 分类: POJ 图论 2015-08-06 19:13 4人阅读 评论(0) 收藏

    Play on Words Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10620 Accepted: 3602 Descri ...

  6. POJ 2513 Colored Sticks (离散化+并查集+欧拉通路)

    下面两个写得很清楚了,就不在赘述. http://blog.sina.com.cn/s/blog_5cd4cccf0100apd1.htmlhttp://www.cnblogs.com/lyy2890 ...

  7. CodeForces - 508D Tanya and Password(欧拉通路)

    Description While dad was at work, a little girl Tanya decided to play with dad characters. She has ...

  8. POJ--1300--Door Man【推断无向图欧拉通路】

    链接:http://poj.org/problem?id=1300 题意:有n个房间.每一个房间有若干个门和别的房间相连.管家从m房间開始走.要回到自己的住处(0),问是否有一条路能够走遍全部的门而且 ...

  9. 欧拉图 欧拉回路 欧拉通路 Euler

    欧拉图 本文链接:http://www.cnblogs.com/Ash-ly/p/5397702.html 定义: 欧拉回路:图G的一个回路,如果恰通过图G的每一条边,则该回路称为欧拉回路,具有欧拉回 ...

随机推荐

  1. Windbg简单介绍

    1.1 使用帮助 Windbg中的命令分为三种:基本命令.元命令和扩展命令.基本命令和元命令都是调试器自带的,元命令以" ."开头. 扩展命令是外部加入的,以"!&quo ...

  2. Python基础练习

    近日,因工作需要要学习Python.为了不在语言细节中无法自拔,我按照网上广为流传的<程序员技术练级攻略>中python部分的学习计划,做了三个简单的练习,算是对python有了初步的了解 ...

  3. HTML5 学习

    1.<header> 标签定义文档的页眉(介绍信息) 标签是 HTML 5 中的新标签 <header> <h1>Welcome to my homepage< ...

  4. java数据库连接类,已经把数据库操作的方法都封装好了

    在这里分享一个已经封装好了的java数据库连接类,只要创建对象就可以实现数据库的增删改查操作,用过都说好.其实这个不是我自己写的,是一个理解和学习能力超高的朋友写的,他也很乐于分享交流,本人也深受他的 ...

  5. Java学习笔记(1):注释规范

    注释规范 1.   类注释 在每个类前面必须加上类注释,注释模板如下: 2.   属性注释 在每个属性前面必须加上属性注释,注释模板如下: 3.   方法注释 在每个方法前面必须加上方法注释,注释模板 ...

  6. 检查DOM能力的函数

    var a=document.implementation.hasFeature("Core","2.0"); var b=document.implement ...

  7. C++拾遗(六)函数相关(1)

    返回值 C++规定返回值不能是 数组.但可以是其它任何类型(包括结构体和对象). 通常,函数将返回值复制到指定的CPU寄存器或内存单元中,然后调用函数调用该内存单元的值. 函数原型 参数列表中可以不包 ...

  8. C++采用模板实现栈的方法

    今天又看了遍<effective C++>,手动实现了一下条款42中的栈,贴出来当博客的处女贴. 首先栈的声明如下,采用了模板传入类型,而栈的底层采用是个链表. // stack.h // ...

  9. php实现获取汉字的首字母实例

    //取汉字的asc区间然后返回汉字首字母了,代码如下:header("Content-type: text/html; charset=utf-8"); function getf ...

  10. Android Framework------之Property子系统

    概述 Property是Android系统中一个重要的概念,在Android系统内,主要用于系统配置,以及不同服务间的简单信息分享.比如设备名字,蓝牙名字,编译信息,网络dns地址,以及其他的一些基本 ...