题目链接:https://vjudge.net/problem/UVA-10129

题目大意:输入N  代表有n个字符串  每个字符串最长1000  要求你把所有的字符串连成一个序列  每个字符串的第一个字母是前一个字符串的最后一个字母

思路:这是学的欧拉回路的第一道题 ,把单词的首字母和尾字母看做结点,单词看作边 ,判断能否找出一条欧拉回路就行了

首先要知道什么是欧拉回路:

第一个条件:图必须是连通的

第二个条件:最多只有两个奇点(出度和入度不相等的点)

满足上面两个条件的就是欧拉回路

如果有两个奇点,必须从一个奇点出发 另一个奇点终止。  不存在奇点的话  任一点出发  回到该点

注意:图是连通的是前提。

求欧拉回路有两种做法  一种是dfs  一种是并查集

我两种都写了,但是用dfs的做法  一直wa   到现在也不明白错在哪了。  所以这里就列出并查集的做法吧

#include<iostream>
#include<string.h>
#include<vector>
using namespace std;
const int maxn=1000+5;
int pa[256];
int findset(int x)//找到它的祖先
{if(pa[x]==x) return pa[x];return pa[x]=findset(pa[x]);
}int used[256],deg[256];//是否出现过  度数int main()
{int T;cin>>T;while(T--){int n;char word[maxn];cin>>n;memset(used,0,sizeof(used));memset(deg,0,sizeof(deg));for(int ch='a';ch<='z';ch++) pa[ch]=ch;//初始化并查集int cc=26;//连通块个数for(int i=0;i<n;i++){cin>>word;char c1=word[0],c2=word[strlen(word)-1];deg[c1]++;//出度的话 ++deg[c2]--;//入度  --used[c1]=used[c2]=1;//标记为出现过int s1=findset(c1),s2=findset(c2);//找到他们的祖先if(s1!=s2)//不是同一个祖先
            {pa[s1]=s2;cc--;//连通块减一
            }}vector<int> d;for(int ch='a';ch<='z';ch++){if(!used[ch]) cc--;//没出现过的字母else if(deg[ch]!=0) d.push_back(deg[ch]);//出度和入度不相等的结点//=0代表出度和入度相等的结点 不需要考虑
        }bool ok=false;if(cc==1&&(d.empty()||(d.size()==2&&(d[0]==1||d[0]==-1)))) ok=true;//cc=1代表只剩下一个块   为空代表成环  不为空 为2的话 一个是出度一个是入度if(ok) cout<<"Ordering is possible."<<endl;else cout<<"The door cannot be opened."<<endl;}return 0;
}

转载于:https://www.cnblogs.com/caijiaming/p/10390426.html

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

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

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

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

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

  3. Uva 10129 单词

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

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

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

  5. UVA 10129 Play on Words

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

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

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

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

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

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

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

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

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

最新文章

  1. 【Groovy】编译时元编程 ( AST 语法树分析 | ClassNode 根节点 | 方法 Methods 节点 | 字段 Fields 节点 | 属性 Properties 节点 )
  2. 如何让控件span的id调用ajax_微服务架构之「 调用链监控 」
  3. Servlet、Filter、Listener总结
  4. 临床医生如何解读Meta分析论文?
  5. 『数据库』 E-R图(实体联系图)你都不会,你设计什么数据库?
  6. 2015蓝桥杯省赛---java---B---10(生命之树)
  7. 「常微分方程」(阿諾爾德) Page 6 問題4 經過擴張相空間的每一點有且僅有一條積分曲線...
  8. 图像目标检测(Object Detection)原理与实现(三)
  9. DeePMD-kit的conda安装方法以及速度慢的解决方案
  10. vector中针对自定义类型的排序
  11. php ftp_ascii,php ftp函数
  12. Axure RP 9(附授权码+安装教程)
  13. springboot jpa 实体类继承
  14. flv文件转换成mp4格式的方法
  15. Android Manager之AudioManager(音频管理器)
  16. 阿里云免费SSL证书续费步骤 TOMCAT
  17. 拼多多怎么设置快捷回复
  18. 利用Basemap画世界地图
  19. 使用scrapy简单爬取网易新闻
  20. 什么是金手指,金手指的设计要求有哪些?

热门文章

  1. Linux2.6信号管理
  2. 【白皮书分享】快手私域经营白皮书.pdf(附下载链接)
  3. 【招聘内推】猎聘网招聘推荐算法工程师
  4. NLP中的词向量总结与实战:从one-hot到bert
  5. python 运维包_python运维常用模块
  6. 如何安装mysql5.7.15_ubuntu16.04安装mysql5.7.15
  7. 日常踩坑:pip安装包速度过慢,更换国内镜像源(亲测有效)
  8. 吴恩达《机器学习》第十五章:异常检测
  9. python, numpy
  10. 吴恩达机器学习作业Python实现(四):神经网络(反向传播)