poj 1386 Play on Words(有向图欧拉回路)
/*
题意:单词拼接,前一个单词的末尾字母和后一个单词的开头字母相同
思路:将一个单词的开头和末尾单词分别做两个点并建一条有向边!然后判断是否存在欧拉回路或者欧拉路 再次强调有向图欧拉路或欧拉回路的判定方法:
(1)有向图G为欧拉图(存在欧拉回路),当且仅当G的基图连通,且所有顶点的入度等于出度。
(2)有向图G为半欧拉图(存在欧拉道路),当且仅当G的基图连通,且存在顶点u的入度比出度大1、v的入度比出度小1,
其它所有顶点的入度等于出度(顶点u,v的个数必须都是1)。 求该图的连通性的时候,只要求该有向图是弱连通的就可以了!所以转换为无向图的连通问题!
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std; int g[][];
char ch[];
int vis[], used[];
int inD[], outD[]; void dfs(int u){
vis[u]=;
for(int i=; i<; ++i)
if(g[u][i] && !vis[i])
dfs(i);
} bool checkDeg(){
int inOut=, outIn=;
for(int i=; i<; ++i)
if(used[i] && inD[i]-outD[i]!=){
if(inD[i]-outD[i]> || inD[i]-outD[i]<-) return false;
else inD[i]-outD[i]> ? ++inOut : ++outIn;
}
return (inOut== && outIn==) || (inOut== && outIn==);
} int main(){
int n, t;
scanf("%d", &t);
while(t--){
scanf("%d", &n);
memset(vis, , sizeof(vis));
memset(used, , sizeof(used));
memset(g, , sizeof(g));
memset(inD, , sizeof(inD));
memset(outD, , sizeof(outD));
while(n--){
scanf("%s", ch);
int u=ch[]-'a', v=ch[strlen(ch)-]-'a';
g[u][v]=g[v][u]=;//无向图的连通性 即是有向图的弱连通
used[u]=used[v]=;
++inD[v];
++outD[u];
}
bool flag=true;
for(int i=; i<; ++i)
if(used[i]){
dfs(i);
break;
}
for(int i=; i<; ++i)
if(used[i] && !vis[i]){
flag=false;
break;
}
if(flag && !checkDeg())
flag=false;
if(flag)
printf("Ordering is possible.\n");
else printf("The door cannot be opened.\n");
}
return ;
}
poj 1386 Play on Words(有向图欧拉回路)的更多相关文章
- POJ 1386 判断欧拉回路
题意:要开启一扇门,n个单词是密码,n个单词中,如果一个单词的首字母和前一个单词的尾字母相同,并且每个单词都能这么连起来且只用一次,则门可以开启,否则不能开启,现给出单词,判断门是否可以开. 有向图欧 ...
- POJ 1386 Play on Words(欧拉图的判断)
Play on Words Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11838 Accepted: 4048 De ...
- poj 1637 Sightseeing tour 混合图欧拉回路 最大流 建图
题目链接 题意 给定一个混合图,里面既有有向边也有无向边.问该图中是否存在一条路径,经过每条边恰好一次. 思路 从欧拉回路说起 首先回顾有向图欧拉回路的充要条件:\(\forall v\in G, d ...
- 有向图欧拉回路个数 BEST定理
有向图欧拉回路个数 BZOJ 3659 但是没有这道题了 直接贴一个别人的板子吧 欧拉回路:存在一条路径经过所有的边刚好1次 有向图欧拉回路存在充要条件:①图连通:②对于所有点都满足出度=入度 BE ...
- bzoj 1515 [POI2006]Lis-The Postman 有向图欧拉回路
LINK:Lis-The Postman 看完题觉得 虽然容易发现是有向图欧拉回路 但是觉得很难解决这个问题. 先分析一下有向图的欧拉回路:充要条件 图中每个点的入度-出度=0且整张图是一个强连通分量 ...
- POJ 1386 欧拉路的判定
题意: 给你n个单词,问你有没有一种排列方式可以所有单词的首部是相邻单词的尾部. 思路: 这个题目还挺基础的,就是个欧拉的判定,首先对于每一个单词,我们把他抽象成边,每个单词两 ...
- poj 1386 Play on Words 有向欧拉回路
题目链接:http://poj.org/problem?id=1386 Some of the secret doors contain a very interesting word puzzle. ...
- poj 1386 Play on Words(有向图欧拉路+并查集)
题目链接:http://poj.org/problem?id=1386 思路分析:该问题要求判断单词是否能连接成一条直线,转换为图论问题:将单词的首字母和尾字母看做一个点,每个单词描述了一条从首字母指 ...
- poj 1386 Play on Words门上的单词【欧拉回路&&并查集】
题目链接:http://poj.org/problem?id=1386 题目大意:给你若干个字符串,一个单词的尾部和一个单词的头部相同那么这两个单词就可以相连,判断给出的n个单词是否能够一个接着一个全 ...
随机推荐
- torch-ios框架XCODE使用备忘
1.首先编译框架 ./generate_ios_framework 2.把框架包含进project 在general-link Frameweork and Libraries 加入这个框架,注 ...
- hdu 5944 Fxx and string
\:nn,下标从1开始,第\:i\:i位的字母为\:s_isi,现在Fxx想知道有多少三元组\:(i,j,k)\:(i,j,k)满足下列条件 1.i,j,k\:i,j,k三个数成等比数列 2.s ...
- iOS网络基础知识
iOS网络基础知识 1.一次HTTP请求的完整过程 (1)浏览器或应用发起Http请求,请求包含Http请求Http(请求),地址(url),协议(Http1.1)请求为头部 (2)web服务器接收到 ...
- 书TO BE READED
Books Created Wednesday 10 August 2011 1.<你的降落伞是什么颜色> 在求职书里面,我觉得这本书是最接近于圣经的. 第一版出现大概还是上世纪70年代末 ...
- 玩转正则之highlight高亮
程序员在编写代码的时候少不了和字符串以及“查询”打交道,两者的交集中有一个叫做正则表达式的的东西,这家伙用好了可以提高编程效率,用不好的话...你可以先去好好学一学. 关于正则的使用,举个简单的例子: ...
- 安装金山WPS2013造成的HTML5 file.type值异常
处理代码的兼容性是前端攻城师们的家常便饭了,一般是对各种浏览器进行兼容性处理.但是有时候我们也会遭遇到浏览器以外的影响因素,这个是经常会被忽视掉的内容.比如前几天就听说客户端安装迅雷.暴风影音等软件会 ...
- HyperDock,让Mac的窗口飞
三年前写了一篇文章,介绍了Windows 7下的Aero效果,其实最终是想引出来写Mac OS上能产生类似功能的HyperDock应用程序,可惜这一拖,就拖到连Windows 10都快要发布了.没有关 ...
- redis源码系列-数据结构(adlist/ziplist/dict)
该系列基于redis-2.8.18,主要记录自己的理解或者想法.redis以自己支持存储的数据结构丰富吸引了大批人,把memcached比了下去.本文就从简单基本的数据结构入手. 双向链表-adlis ...
- VS 2008 生成操作中各个选项的差别
近日,在编译C#项目时经常发现有些时候明明代码没错,但就是编译不过,只有选择重新编译或者清理再编译才会不出错,本着求学的态度,搜罗了下VS2008IDE中生成操作的种类以及差别,整理如下: 内容( ...
- underscore源码阅读记录(二)
引自underscore.js context参数用法 _.each(list, iteratee, [context]); context为上下文,如果传递了context参数,则把iterator ...