POJ-1386 Play on Words 有向图欧拉通路判定
题意:给定一系列的单词,这些单词要使用类似与成语接龙的方式将他们连接起来,现在问是否存在这样一个通路。
解法:为什么这种题目刚看起来总是像那个什么哈密顿回路呢?欧拉回路主要解决对边的遍历问题,因此我们需要将已知条件转移到边上的信息即可。对于一个单词acm,那么就连接一条从a到m的边,那么走这条边也就访问了这个单词。有向图判定是否存在欧拉路径的方法是:在保证图连通的情况下,所有点的入度等于出度或者是存在两个点,一个点入度比出度大1,另一个点出度比入度大1。
代码如下:
#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <algorithm> #include <vector> using namespace std;int set[30]; int N, odd, in[30], out[30]; int hav[30]; vector<int>v;int find(int x) {return set[x] = x == set[x] ? x : find(set[x]); }void merge(int a, int b) {set[a] = b; }int main() {int T, ok;char str[1005];scanf("%d", &T);while (T--) { for(int i = 0; i < 26; ++i) {hav[i] = 0;set[i] = i; }v.clear();scanf("%d", &N);ok = 0;memset(in, 0, sizeof (in));memset(out, 0, sizeof (out));for (int i = 0; i < N; ++i) {scanf("%s", str);char a = str[0]-'a', b = str[strlen(str)-1]-'a';++out[a];++in[b];hav[a] = hav[b] = 1;merge(find(a), find(b));}for (int i = 0; i < 26; ++i) {if (set[i] == i && hav[i]) {++ok;}if (in[i] != out[i]) {v.push_back(i);}}if (ok != 1) {puts("The door cannot be opened.");continue;}if (v.size() > 2) {puts("The door cannot be opened."); } else if (v.size() == 2){if ((in[v[0]]-out[v[0]])*(in[v[1]]-out[v[1]]) == -1) {puts("Ordering is possible.");} else {puts("The door cannot be opened.");}} else {puts("Ordering is possible."); }}return 0; }
POJ-1386 Play on Words 有向图欧拉通路判定相关推荐
- 【POJ - 2337】Catenyms(欧拉图相关,欧拉通路输出路径,tricks)
题干: A catenym is a pair of words separated by a period such that the last letter of the first word i ...
- POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树
一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...
- #1176 : 欧拉路·一(欧拉通路的判定)
#1176 : 欧拉路·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找 ...
- 图论 —— 图的遍历 —— 欧拉通路与欧拉回路问题
[基本概念] 欧拉通路:通过图中所有边一次且仅一次行遍所有顶点的通路 欧拉回路:通过图中所有边一次且仅一次行遍所有顶点的回路 欧拉图:具有欧拉回路的图 半欧拉图:具有欧拉通路而无欧拉回路的图 奇度点: ...
- 欧拉图——欧拉通路和欧拉回路
定义: 欧拉通路 (欧拉迹):通过图中每条边且只通过一次,并且经过每一顶点的通路. 欧拉回路 (欧拉闭迹):通过图中每条边且只通过一次,并且经过每一顶点的回路. 欧拉图:存在欧拉回路的图. 简单说欧拉 ...
- 欧拉回路 欧拉通路 欧拉回路图
来源 一.定义 对于无向图: 1) 设G是连通无向图,则称经过G的每条边一次并且仅一次的路径为欧拉通路: 2) 如果欧拉通路是回路(起点和终点是同一个顶点),则称此回路为欧拉回路(Euler circ ...
- 欧拉通路、欧拉回路、欧拉图和半欧拉图以及 Hierholzer 算法
概念:欧拉通路(又称欧拉路径).欧拉回路.欧拉图和半欧拉图 定义 通过图中所有边恰好一次且行遍所有顶点的通路称为欧拉通路(又称欧拉路径). 通过图中所有边恰好一次且行遍所有顶点的回路称为欧拉回路. 具 ...
- 图系列(四)欧拉通路与欧拉回路
欧拉通路与欧拉回路 之前,写了图系列一二三,现在出四啦!这也意味着,对于图的部分,可以说50%以上常用的内容就已经过了一遍了.欧拉路的部分会稍微难一点,主要是我们要和定义打交道了.至于其他图的理论,我 ...
- ZOJ - 4122 Triangle City(最短路+欧拉通路+思维)
题目链接:点击查看 题目大意:给出一张三角形的无向图,如下图所示 求出从点 ( 1 , 1 ) 到点 ( n , n ) 找到一条最长路,且每条边至多遍历一次,输出最长路的权值以及路径 题目分析:点 ...
最新文章
- 论文笔记之:Generative Adversarial Text to Image Synthesis
- Squid代理服务器(二)
- ASP.NET 3.5 的 ListView 控件与 CSS Friendly
- [JOYOI] 1124 花店橱窗
- Vue 脚手架中的.eslintrc.js代码规范 的解决
- divcss布局模板代码_CSS3布局(前端所必须要掌握)
- Matlab--max,min函数的用法
- python属于私有属性_Python私有属性和受保护的属性原理解析
- 2018.9--2019.7 Java开发工作中的经验和教训之db2数据库操作
- 两种添加数据到DropDownList 控件的方法
- VUe Eelement-ui 兼容es6 兼容IE9+ 报错:SCRIPT1003: 缺少 ':’
- CocoaPods 的安装(第三方开源类库)
- 谷粒商城 Day04 sku与spu接口
- 小白入门web前端360必问--Html标签语义化可能最全,越段位之神器;
- 计算机相关学科查找英文paper的一般方法
- Raspberry Pi 4和 Raspberry Pi 4B的区别_8GB内存的树莓派4来啦!国内售价589元,官方还推出配套64位系统...
- 英语 Yang liang 120 --180
- PUCCH(3)matlab验证ZC序列的性质
- 【Android控件属性记录】
- mac苹果灯亮出风口烫开不了机解决办法