题意:将n个单词排成一个序列,保证相邻单词相邻处字母相同。

分析:每个单词看做一条有向边,字母为点,并查集看图是否连通,因为是有向图,所以最多只能有两个点入度不等于出度,且这两个点一个入度比出度大1,一个出度比入度大1

并查集,单词的首字母是尾字母的祖先。

#pragma comment(linker, "/STACK:102400000, 102400000")
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<deque>
#include<queue>
#include<list>
#define Min(a, b) ((a < b) ? a : b)
#define Max(a, b) ((a < b) ? b : a)
typedef long long ll;
typedef unsigned long long llu;
const int INT_INF = 0x3f3f3f3f;
const int INT_M_INF = 0x7f7f7f7f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
const ll LL_M_INF = 0x7f7f7f7f7f7f7f7f;
const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1};
const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1};
const int MOD = 1e9 + 7;
const double pi = acos(-1.0);
const double eps = 1e-8;
const int MAXN = 1000 + 10;
const int MAXT = 10000 + 10;
using namespace std;
char s[MAXN];
int fa[30];
int in[30];
int out[30];
int Find(int x){return fa[x] = (x == fa[x]) ? x : Find(fa[x]);
}
int main(){int T;scanf("%d", &T);while(T--){for(int i = 0; i <= 25; ++i){fa[i] = i;}memset(in, 0, sizeof in);memset(out, 0, sizeof out);int n;scanf("%d", &n);for(int i = 0; i < n; ++i){scanf("%s", s);int len = strlen(s);int x = s[0] - 'a';int y = s[len - 1] - 'a';++in[y];++out[x];int tx = Find(x);int ty = Find(y);fa[ty] = tx;//首字母是尾字母的祖先
        }bool ok = true;int cnt = 0;for(int i = 0; i < 26; ++i){//统计连通块个数if((in[i] || out[i]) && fa[i] == i){++cnt;}}if(cnt > 1) ok = false;//图不连通int num1 = 0;//入度比出度大1的结点数int num2 = 0;//出度比入度大1的结点数for(int i = 0; i < 26; ++i){if(!ok) break;if(in[i] != out[i]){if(in[i] - out[i] == 1) ++num1;else if(out[i] - in[i] == 1) ++num2;else{ok = false;break;}}}if(ok){if(!((num1 == 0 && num2 == 0) || (num1 == 1 && num2 == 1))) ok = false;}if(!ok){printf("The door cannot be opened.\n");}else{printf("Ordering is possible.\n");}}return 0;
}

转载于:https://www.cnblogs.com/tyty-Somnuspoppy/p/6275639.html

UVA - 10129 Play on Words(欧拉回路)相关推荐

  1. Play on Words UVA - 10129 (有向图欧拉路径)

    Play on Words UVA - 10129 题意:n个单词,问能否收尾相连形成一条链. 把单词首尾字母看做点,单词内部连一条边,问是否存在欧拉路径. 用并查集,当且仅当只有一个点的出度比入度大 ...

  2. UVA - 10129 Play on Words(欧拉回路+并查集)

    2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个 ...

  3. Play on Words UVA - 10129 (欧拉回路)

    题目链接:https://vjudge.net/problem/UVA-10129 题目大意:输入N  代表有n个字符串  每个字符串最长1000  要求你把所有的字符串连成一个序列  每个字符串的第 ...

  4. Uva 10129 单词

    题目链接:https://uva.onlinejudge.org/external/101/10129.pdf 把单词的首字母和最后一个字母看做节点,一个单词就是一个有向边.有向图的欧拉定理,就是除了 ...

  5. UVA 10129 Play on Words(欧拉道路)

    题意:给你n个字符串,问你是否可以出现一条链,保证链中每个字符串的第一个元素与上一个字符串的最后一个元素相同,注意可能重复出现同一个字符串 题解:以每一个字符串第一个元素指向最后一个元素形成一个有向图 ...

  6. UVA 10129 Play on Words

    UVA_10129 这个题目我一开始把一个字符串看成了一个点,这样就相当于去找是否存在一条不经过重复顶点的路径可以覆盖所有顶点,但这么去做的话会比较麻烦. 后来想了一下,实际上可以把一个字符串看成一条 ...

  7. 单词 (Play on Words UVA - 10129 )

    题目描述: 原题:https://vjudge.net/problem/UVA-10129 题目思路: 1.明显是判断欧拉路径 2.欧拉路径的两个条件 a.图连通 b.至多为两个奇点,且一个为起点一个 ...

  8. UVa 10596 - Morning Walk, 赤裸裸的欧拉回路

    10596 - Morning Walk 3791 37.43% 1073 89.84% 题目链接: http://uva.onlinejudge.org/index.php?option=com_o ...

  9. 关于最近的感想以及贴些图论模板

    春节后的集训不久前又开始辣~十天的寒假过得跟做梦一样,文化课的的作业匆匆赶完,在我们的认知中"选做=不做".年前是DP,什么线性DP.树上DP.斜率优化,(巴拉巴拉).原本就基础不 ...

  10. 算法竞赛入门竞赛 入门经典 第六章 个人记录

    UVa 210 并行程序模拟(放弃 || 待补) 没看懂题意,但是有百度了一下duque 算是对duque有了一个大致的认识和了解 当然也有尝试. 本来想着去hdu找一些duque的题 结果 好像可以 ...

最新文章

  1. LeetCode简单题之递增顺序搜索树
  2. byte[]数组下标的最大值
  3. 连接redis的linux命令,redis常见操作命令
  4. MOON.ORM 3.5 MYSQL的配置及使用方法(最新版免费下载使用.欢迎加盟)
  5. codesoft指定打印机打印_巧用win32print来控制windows系统打印机并推送打印任务
  6. Ruby中的Mixin
  7. Mac下Eclipse SVN 更换账号
  8. vuex的基础小案例(黑马教程)
  9. jsp连接mysql 菜鸟_在JSP中访问数据库大全
  10. Elasticsearch的关键词搜索
  11. “M1芯片”电脑杀手:Windows笔记本电脑目前岌岌可危
  12. html的abbr标签,html中如何使用abbr标签
  13. c语言对企业有什么作用,C语言企业级的需要学习的知识
  14. js和css压缩工具
  15. 2015年3月TIOBE编程语言排行榜单
  16. 中断工作原理在现代计算机中的应用,中断、DMA、通道
  17. memcache1.5.8——LUR策略
  18. memset函数原型
  19. 软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题46-50题)
  20. 【JZOJ3054】祖孙询问【LCA】

热门文章

  1. JavaScript 求和(字符串转换成数组、for循环求和)
  2. java 序列化,流,二进制的区别和联系
  3. 算法,PHP取数据库中百万条数据中随机20条记录
  4. Java 垃圾收集策略、垃圾分代回收算法、垃圾回收运作流程
  5. CentOS 7.5 yum 安装 Git
  6. 光盘安装 windowns 10 系统 与 Win10 英文系统修改成中文系统
  7. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_09-webpack研究-webpack介绍
  8. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_14maven工程servlet实例之指定web文件夹...
  9. 51Nod 1002:数塔取数问题(DP)
  10. win8蓝屏错误代码DPC_WATCHDOG_VIOLATION您的电脑遇到错误需要重启修复