Play on Words UVA - 10129 (有向图欧拉路径)
Play on Words
UVA - 10129
题意:n个单词,问能否收尾相连形成一条链。
把单词首尾字母看做点,单词内部连一条边,问是否存在欧拉路径。
用并查集,当且仅当只有一个点的出度比入度大1一个点的入度比出度大1其它点出度和入度相等时存在欧拉路径。
1 #include<cstdio> 2 #include<cstring> 3 #include<set> 4 #include<iostream> 5 #include<cctype> 6 #include<string> 7 #include<sstream> 8 #include<algorithm> 9 #include<map> 10 #define LL long long 11 using namespace std; 12 const int maxn=100010; 13 int in[30],out[30]; 14 int f[30]; 15 set<int> si; 16 void init() 17 { 18 for(int i=0;i<30;i++) 19 { 20 in[i]=0; 21 out[i]=0; 22 f[i]=i; 23 } 24 } 25 26 int gf(int x) 27 { 28 return x==f[x]?x:f[x]=gf(f[x]); 29 } 30 31 void uni(int a,int b) 32 { 33 int pa=gf(a); 34 int pb=gf(b); 35 f[pa]=pb; 36 } 37 string s; 38 int main() 39 { 40 int t; 41 scanf("%d",&t); 42 while(t--) 43 { 44 int ok=1; 45 si.clear(); 46 init(); 47 int n; 48 int a,b; 49 int ctin=0,ctout=0,ct=0; 50 scanf("%d",&n); 51 for(int i=0;i<n;i++) 52 { 53 cin>>s; 54 a=s[0]-'a'; 55 b=s[s.length()-1]-'a'; 56 si.insert(a); 57 si.insert(b); 58 in[a]++; 59 out[b]++; 60 if(gf(a)!=gf(b)) uni(a,b); 61 } 62 int u=gf(a); 63 for(set<int> ::iterator it=si.begin();it!=si.end();it++) 64 { 65 if(gf(*it)!=u) ct++; 66 if(ct>0) {ok=0;break;} 67 if(in[*it]-out[*it]==1) ctin++; 68 else if(in[*it]-out[*it]==-1) ctout++; 69 else if(in[*it]-out[*it]>1||in[*it]-out[*it]<-1) {ok=0;break;} 70 if(ctin>1||ctout>1) {ok=0;break;} 71 } 72 73 if(ok) puts("Ordering is possible."); 74 else puts("The door cannot be opened."); 75 } 76 }
View Code
转载于:https://www.cnblogs.com/yijiull/p/7435139.html
Play on Words UVA - 10129 (有向图欧拉路径)相关推荐
- Uva 10129 单词
题目链接:https://uva.onlinejudge.org/external/101/10129.pdf 把单词的首字母和最后一个字母看做节点,一个单词就是一个有向边.有向图的欧拉定理,就是除了 ...
- UVA 10129 Play on Words(欧拉道路)
题意:给你n个字符串,问你是否可以出现一条链,保证链中每个字符串的第一个元素与上一个字符串的最后一个元素相同,注意可能重复出现同一个字符串 题解:以每一个字符串第一个元素指向最后一个元素形成一个有向图 ...
- UVA 10129 Play on Words
UVA_10129 这个题目我一开始把一个字符串看成了一个点,这样就相当于去找是否存在一条不经过重复顶点的路径可以覆盖所有顶点,但这么去做的话会比较麻烦. 后来想了一下,实际上可以把一个字符串看成一条 ...
- UVA - 10129 Play on Words(欧拉回路+并查集)
2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个 ...
- 单词 (Play on Words UVA - 10129 )
题目描述: 原题:https://vjudge.net/problem/UVA-10129 题目思路: 1.明显是判断欧拉路径 2.欧拉路径的两个条件 a.图连通 b.至多为两个奇点,且一个为起点一个 ...
- Play on Words UVA - 10129 (欧拉回路)
题目链接:https://vjudge.net/problem/UVA-10129 题目大意:输入N 代表有n个字符串 每个字符串最长1000 要求你把所有的字符串连成一个序列 每个字符串的第 ...
- UVa 10596 - Morning Walk, 赤裸裸的欧拉回路
10596 - Morning Walk 3791 37.43% 1073 89.84% 题目链接: http://uva.onlinejudge.org/index.php?option=com_o ...
- 算法竞赛入门竞赛 入门经典 第六章 个人记录
UVa 210 并行程序模拟(放弃 || 待补) 没看懂题意,但是有百度了一下duque 算是对duque有了一个大致的认识和了解 当然也有尝试. 本来想着去hdu找一些duque的题 结果 好像可以 ...
- 初学者acm的练习题指南
上机练习题参考题 忘了在哪找的啦~~希望对大家有帮助呦 <!--[if !supportLists]-->1. <!--[endif]-->Programming Bas ...
最新文章
- 数据结构----内存分配问题
- 来自Mozilla的CSS书写规范建议
- 这些产品基本功了解一下?
- java游戏最终boss烛龙_游戏中劝退玩家的变态小怪!神装扛不住它一击,难度秒杀最终BOSS?...
- 再次搬家到自建博客http://www.wikieee.com/blog/leiad/homepage
- springboot报告如下一个异常
- 服务器64位还是32位系统好,云服务器64位还是32位
- Security+ 学习笔记46 网络工具
- coxbox变换 python_怎样用Python实现对Xbox手柄的控制?
- yum源配置的三种方法
- python绘图——坐标轴
- NAT模式实现虚拟机共享主机网络
- 小程序marker callout 遇到的坑
- 苹果怎么清理隐藏内存?全新手机技巧,还不会的亏大了!
- 鞍部在哪里_富春江,富春江在哪里_富春江在哪个省_属于哪个省_就去旅游网
- DJ13-1 汇编语言程序设计-3
- 学习单片机的几点经验之谈
- 自媒体平台有哪些---(特点及优缺点)
- OB数据库大赛初赛总结
- java_Stream流和Optional