POJ 1386 有向图欧拉通路
题意:给你一些字符串,这些字符串可以首位相接(末位置如果和另一个字符串的首位置相同的话就可以相连) 。然后问你是否可以全部连起来。
思路:就是取出每个字符串的首尾位置,然后求出出度和入度,根据有向欧拉通路的性质,可以求出是否可以组成欧拉通路 。
当然还得考虑一下这个图是否是连通图,这里可以用并查集记录边的集合。最后判断是否是一个连通图。
欧拉通路水题。
#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 有向图欧拉通路的更多相关文章
- HDU1116 Play on Words(有向图欧拉通路)
我把单词当作点,然后这样其实是不对的,这样就要判定是否是哈密顿通路.. 这题应该把单词的首尾单词当作点,而单词本身就是边,那样就是判定欧拉通路了. 有向图包含欧拉通路的充要条件是:首先基图连通,然后是 ...
- POJ 2337 Catenyms(有向图的欧拉通路)
题意:给n个字符串(3<=n<=1000),当字符串str[i]的尾字符与str[j]的首字符一样时,可用dot连接.判断用所有字符串一次且仅一次,连接成一串.若可以,输出答案的最小字典序 ...
- Poj 2337 Catenyms(有向图DFS求欧拉通路)
题意: 给定n个单词, 问是否存在一条欧拉通路(如acm,matal,lack), 如果存在, 输出字典序最小的一条. 分析: 这题可以看作http://www.cnblogs.com/Jadon97 ...
- POJ 1780 Code(有向图的欧拉通路)
输入n(1<=n<=6),输出长度为10^n + n -1 的字符串答案. 其中,字符串以每n个为一组,使得所有组都互不相同,且输出的字符串要求字典序最小. 显然a[01...(n-1)] ...
- 欧拉通路-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 ...
- POJ 2513 Colored Sticks (离散化+并查集+欧拉通路)
下面两个写得很清楚了,就不在赘述. http://blog.sina.com.cn/s/blog_5cd4cccf0100apd1.htmlhttp://www.cnblogs.com/lyy2890 ...
- CodeForces - 508D Tanya and Password(欧拉通路)
Description While dad was at work, a little girl Tanya decided to play with dad characters. She has ...
- POJ--1300--Door Man【推断无向图欧拉通路】
链接:http://poj.org/problem?id=1300 题意:有n个房间.每一个房间有若干个门和别的房间相连.管家从m房间開始走.要回到自己的住处(0),问是否有一条路能够走遍全部的门而且 ...
- 欧拉图 欧拉回路 欧拉通路 Euler
欧拉图 本文链接:http://www.cnblogs.com/Ash-ly/p/5397702.html 定义: 欧拉回路:图G的一个回路,如果恰通过图G的每一条边,则该回路称为欧拉回路,具有欧拉回 ...
随机推荐
- class类名的管理
var a=document.querySelector(".div1"); a.classList.remove("div2");//减掉一个 a.class ...
- Ignatius and the Princess I
算法:搜索+优先队列+(递归输出结果) The Princess has been abducted by the BEelzebub feng5166, our hero Ignatius has ...
- Linux Shell脚本编程--sed命令详解
简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...
- 2.2 文件 I/O 的基石:Path
Path通常代表文件系统中的位置,能浏览任何类型的文件系统,包括zip归档文件系统: 文件系统中的几个概念:目录树.根目录.绝对路径.相对路径: NIO.2中的Path是一个抽象构造,你所创建和处理的 ...
- phpcms v9 表单向导里添加图片字段,提示会话过期,请重新登陆
用 phpcms v9 制作前端用户提交信息时,有个图片上传的栏目. 如果注释 /phpcms/modules/attachment/attachment.php 20//判断是否登录 21 if(e ...
- Ubuntu 12.04更换显示器后显示“显示不支援”,只能进恢复模式工作
以前用的一台14寸液晶,换成17寸后,进入系统显示器上“显示不支援” .仔细观查,电脑硬盘自检能显示后,后面都是黑屏. 解决过程. 因为grub 启动菜单不能显示.盲按方向键,发现菜单里的其它项目可 ...
- .Net冷知识之动态查找类型时的程序集路径问题
今天就说说.Net中通过反射取得某个类型时,我们怎么知道这个类型在硬盘上的哪个角落?比如说,假如我们需要要求服务端动态载入某个数据源,那服务端怎么知道数据源在哪? 网上大部分的教程都写着,可以使用As ...
- UCOS 杂项 笔记
1. 建立任务和建立数据队列 哪个先建立? 经过试验得知,数据队列和任务的建立先后没有顺序,都可以正常运行. 2.关于主函数的面试问题. 主函数写法有: int main() 和voi ...
- 【学习笔记】【Foundation】字典
字典NSDictionary: 用于保存具有映射关系的数据:key-value: 创建NSDictionary的常用方法: dictionary: dictionaryWithContentsOfFi ...
- C/C++堆栈指引(转)
C/C++堆栈指引 Binhua Liu 前言 我们经常会讨论这样的问题:什么时候数据存储在堆栈(Stack)中,什么时候数据存储在堆(Heap)中.我们知道,局部变量是存储在堆栈中的:debug时, ...