UVa 10129 单词 (欧拉通路)
题意:
输入n(n≤100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同(例如acm、malform、mouse)。每个单词最
多包含1000个小写字母。输入中可以有重复单词。
分析:
可以看出, 把字母看成顶点(最多26个), 然后单词就是有向边, 单词与单词之间的关系就连接起来了, 然后建立邻接矩阵, 自环的可以忽略, 记录输入的字母有哪几个, 字母的度数。
然后图中存在欧拉通路的条件有2个
(1) 连通(我用了dfs来判断)
(2) 要么没有奇度顶点, 如果有, 那么肯定是有一个入度-出度=1 有一个入度-出度= -1。
用好这两个条件就可以判定应该就可以得出答案了
#include <bits/stdc++.h>
using namespace std;
int degree[],used[];//度数 有没有使用过
int G[][];// 邻接矩阵
int n;
int id(int a){
return a-'a';
}
int vis[];
void dfs(int u){
vis[u] = ;
for(int i = ; i < ; i++){
if(G[u][i] && !vis[i]){
dfs(i);
}
}
} bool judge(){
int num1 = , num2 = ;
int u = , v;
for(int i = ; i< ; i++){
if(used[i]){
u = i;//u一开始等于图中任意一个顶点
break;
}
}
for(int i = ; i < ; i++){
if(used[i]){
if(degree[i] != ){
if(degree[i] == ) {num1++; u = i;}//此时u就要等于入度>出度的顶点了
else if(degree[i] == -){num2++; v = i;}
else return false;
}
}
}
if((num1 || num2) && num1 + num2 != ) return false;//如果有 而且不是只有2个 就可以判为false了 memset(vis,,sizeof(vis));
dfs(u);
for(int i = ; i < ; i++){
if(used[i] && !vis[i]){//如果有这个点, 遍历又没遍历到 false;
return false;
}
}
return true; }
int main(){
int T;
scanf("%d", &T);
while(T--){
memset(degree,,sizeof(degree));
memset(used,,sizeof(used));
memset(G,,sizeof(G));
scanf("%d", &n);
for(int i = ; i < n; i++){
char s[];
scanf("%s", s);
int s1 = s[] , s2 = s[strlen(s)-];
if(s1 != s2){
G[id(s1)][id(s2)] = ;
}
used[s1 -'a'] = ;
used[s2 -'a'] = ;
degree[id(s1)]++;//出度++
degree[id(s2)]--;//入度--
}
// for(int i = 0; i<26; i++){//观察度数
// if(used[i])
// printf("%c %d\n", i+'a', degree[i]);
// }
printf("%s\n", judge()? "Ordering is possible.":"The door cannot be opened.");
}
}
UVa 10129 单词 (欧拉通路)的更多相关文章
- poj2513- Colored Sticks 字典树+欧拉通路判断
题目链接:http://poj.org/problem?id=2513 思路很容易想到就是判断欧拉通路 预处理时用字典树将每个单词和数字对应即可 刚开始在并查集处理的时候出错了 代码: #includ ...
- Colored Sticks POJ - 2513 并查集+欧拉通路+字典树hash
题意:给出很多很多很多很多个棒子 左右各有颜色(给出的是单词) 相同颜色的可以接在一起,问是否存在一种 方法可以使得所以棒子连在一起 思路:就是一个判欧拉通路的题目,欧拉通路存在:没奇度顶点 或者 ...
- POJ 1386 Play on Words(有向欧拉通路 连通图)
题意 见下方中文翻译 每一个单词能够看成首尾两个字母相连的一条边 然后就是输入m条边 推断是否能构成有向欧拉通路了 有向图存在欧拉通路的充要条件: 1. 有向图的基图连通: 2. 全部点的出度和 ...
- ACM/ICPC 之 DFS求解欧拉通路路径(POJ2337)
判断是欧拉通路后,DFS简单剪枝求解字典序最小的欧拉通路路径 //Time:16Ms Memory:228K #include<iostream> #include<cstring& ...
- POJ 1300 欧拉通路&欧拉回路
系统的学习一遍图论!从这篇博客开始! 先介绍一些概念. 无向图: G为连通的无向图,称经过G的每条边一次并且仅一次的路径为欧拉通路. 如果欧拉通路是回路(起点和终点相同),则称此回路为欧拉回路. 具有 ...
- poj 2513 连接火柴 字典树+欧拉通路 好题
Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 27134 Accepted: 7186 ...
- hdu1116有向图判断欧拉通路判断
Play on Words Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- 欧拉回路&欧拉通路判断
欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次, 称这条回路为欧拉回路.具有欧拉回路的图成为欧拉图. 判断欧拉通路是否存在的方法 ...
- POJ2513Colored Sticks(欧拉通路)(字典树)(并查集)
Colored Sticks Time Limit: 5000MS Memory ...
随机推荐
- _bzoj1001 [BeiJing2006]狼抓兔子【平面图】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 顺便推荐一个ppt,里面有对平面图的介绍:浅析最大最小定理在信息学竞赛中的应用. 这里 ...
- Maximum Subsequence Sum 最大子序列和的进击之路
本文解决最大子序列和问题,有两个题目组成,第二个题目比第一个要求多一些(其实就是要求输出子序列首尾元素). 01-复杂度1 最大子列和问题 (20分) 给定KK个整数组成的序列{ N1, N2 ...
- Java核心技术梳理-异常处理
一.引言 异常总是不可避免的,就算我们自身的代码足够优秀,但却不能保证用户都按照我们想法进行输入,就算用户按照我们的想法进行输入,我们也不能保证操作系统稳定,另外还有网络环境等,不可控因素太多,异常也 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源 ...
- 数据库系统概论(1)——Chap. 1 Introduction
数据库系统概论--Introduction 一.数据库的4个基本概念 数据(data):数据是数据库中存储的基本单位.我们把描述事物的符号记录称为数据.数据和关于数据的解释是不可分的,数据的含义称为数 ...
- iTOP-4412开发板网盘资料介绍
iTOP-4412开发板网盘视频资料内容如下: 01-烧写.编译以及基础知识视频 02-嵌入式Linux 视频 03-iTOP-4412 开发板硬件设计指导视频 04-Android 应用程序视频 0 ...
- Bootstrap modal使用及点击外部不消失的解决方法
这篇文章主要为大家详细介绍了Bootstrap modal使用及点击外部不消失的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Bootstrap modal使用及点击 ...
- (转)淘淘商城系列——使用maven tomcat插件启动聚合工程
http://blog.csdn.net/yerenyuan_pku/article/details/72672389 上文我们一起学习了如何使用maven tomcat插件来启动web工程,本文我们 ...
- Discuz3.1登录QQ互联显示redirect uri is illegal(100010)的解决
QQ互联最近也是BUG不断,引起了很多用户的不满,从早前关闭群组功能,到发布2.0接口标准,引发系列站长用户的连锁反应.而Discuz从X3开始,为了应对QQ互联的2.0接口标准,采用了云平台来整合Q ...
- windows测试物理网络
ping 192.168.10.88 -t ,参数-t是等待用户去中断测试