UVa 10129 Play On Words【欧拉道路 并查集 】
题意:给出n个单词,问这n个单词能否首尾接龙,即能否构成欧拉道路
按照紫书上的思路:用并查集来做,取每一个单词的第一个字母,和最后一个字母进行并查集的操作
但这道题目是欧拉道路(下面摘自http://blog.csdn.net/hcbbt/article/details/9316301)
关于欧拉道路(from Titanium大神):
判断有向图是否有欧拉路
1.判断有向图的基图(即有向图转化为无向图)连通性,用简单的DFS即可。如果图都不连通,一定不存在欧拉路
2.在条件1的基础上 对于欧拉回路,要求苛刻一点,所有点的入度都要等于出度,那么就存在欧拉回路了
对于欧拉道路,要求松一点,只有一个点,出度比入度大1,这个点一定是起点; 一个点,入度比出度大1,这个点一定是终点.其余点的出度等于入度
(注意,只能大1,而且这样的点分别只能有1个,而且存在起点就一定要存在终点,存在终点就一定要存在起点)
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include <cmath>
- #include<stack>
- #include<vector>
- #include<map>
- #include<algorithm>
- #define mod=1e9+7;
- using namespace std;
- typedef long long LL;
- int degree[],pre[],in[],out[];
- char s[];
- int find(int root){
- return root == pre[root] ? root : pre[root] = find(pre[root]); }
- int main(){
- int t,n,i,j,flag,len,root;
- cin>>t;
- while(t--){
- cin>>n;
- for(i=;i<=;i++)
- pre[i]=i;
- memset(in,,sizeof(in));
- memset(out,,sizeof(out));
- for(i=;i<=n;i++){
- cin>>s;
- len=strlen(s);
- int u=s[]-'a';int v=s[len-]-'a';
- out[u]++;in[v]++;
- pre[find(u)]=find(v);
- root=find(v);
- }
- int ans=,inn=,outt=;
- for(i=;i<=;i++){
- if(in[i]||out[i]) {//如果入度或者出度 有一个存在,才继续判断
- if(find(pre[i])!=root)//判断是否属于同一个联通块
- ans++;
- if(in[i]-out[i]==) //如果入度比出度大1的点的个数大于1,则不满足条件
- inn++;
- else if(out[i]-in[i]==)
- outt++;
- else if(abs(in[i]-out[i])>)
- break;
- }
- }
- if(i<=||ans>||inn>||outt>) printf("The door cannot be opened.\n"); //i<=30表明没有正常跳出循环,不构成欧拉道路
- else printf("Ordering is possible.\n");
- }
- return ;
- }
UVa 10129 Play On Words【欧拉道路 并查集 】的更多相关文章
- UVA 10129 Play on Words (欧拉通路)
本文链接:http://www.cnblogs.com/Ash-ly/p/5398627.html 题意: 输入N(N <= 100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单 ...
- Uva 10129 - Play on Words 单词接龙 欧拉道路应用
跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...
- UVA 10129 Play on Words(欧拉道路)
题意:给你n个字符串,问你是否可以出现一条链,保证链中每个字符串的第一个元素与上一个字符串的最后一个元素相同,注意可能重复出现同一个字符串 题解:以每一个字符串第一个元素指向最后一个元素形成一个有向图 ...
- UVA 10441 - Catenyms(欧拉道路)
UVA 10441 - Catenyms 题目链接 题意:给定一些单词,求拼接起来,字典序最小的,注意这里的字典序为一个个单词比过去,并非一个个字母 思路:欧拉回路.利用并查集判联通,然后欧拉道路判定 ...
- 【UVa】12118 Inspector's Dilemma(欧拉道路)
题目 题目 分析 很巧秒的一道题目,对着绿书瞎yy一会. 联一下必须要走的几条边,然后会形成几个联通分量,统计里面度数为奇数的点,最后再减去2再除以2.这样不断相加的和加上e再乘以t就是答案, ...
- Nyoj42 一笔画问题 (欧拉道路)
http://acm.nyist.net/JudgeOnline/problem.php?pid=42题目链接 #include <cstdio> #include <cstring ...
- 6-14 Inspector s Dilemma uva12118(欧拉道路)
题意:给出一个国家城市个数n 所需走过道路个数e 每条道路长t 该国家任意两个城市之间都存在唯一道路长t 要求 :找一条最短的路遍历所有所需走过的路 一开始以为是图的匹配 但是好 ...
- POJ 2513 Colored Sticks(欧拉道路+字典树+并查集)
http://poj.org/problem?id=2513 题意: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的. 思路: 题目很明 ...
- UVA-10129 Play on Words (判断欧拉道路的存在性)
题目大意:给出一系列单词,当某个单词的首字母和前一个单词的尾字母相同,则这两个单词能链接起来.给出一系列单词,问是否能够连起来. 题目分析:以单词的首尾字母为点,单词为边建立有向图,便是判断图中是否存 ...
随机推荐
- angular入门系列教程4
主题: 本篇主要目的就是继续完善home页下的index子页面的内容,处理一个列表,进行增删改查过滤等操作. 效果图: 细节: 主要的更改有两个,一个是修改模板index.html,还有就是增加控制器 ...
- Codeforces Round #Pi (Div. 2) E. President and Roads 最短路+桥
题目链接: http://codeforces.com/contest/567/problem/E 题意: 给你一个带重边的图,求三类边: 在最短路构成的DAG图中,哪些边是必须经过的: 其他的(包括 ...
- 项目中libevent几个问题
几个问题: .libevent到底用的是select还是iocp,然后是如何突破64限制的 typedef struct fd_set { u_int fd_count; /* how many ar ...
- jquery层居中,点击小图查看大图,弹出层居中代码,顶部层固定不动,滚动条滚动情况
jquery层居中,点击小图查看大图,弹出层居中代码 http://www.cnblogs.com/simpledev/p/3566280.html 见第一版,发现一个情况,如果页面内容多出一屏的情况 ...
- Zabbix 安装及微信短信提醒
Zabbix简介 Zabbix 近几年得到了各大互联网公司的认可,当然第一点归功与它强大的监控功能,第二点免费开源也得到了广大用户的青睐.Zabbix 能将操作系统中的绝大部分指标进行监控,比如(CP ...
- IOS委托设计模式(摘自IOS开发指南)
- hdu 1709 The Balance
母函数的特殊情况,左右两边都可以放,如样例1,2,9 母函数为(1+x+1/x)*(1+x^2+1/x^2)*(1+x^9+1/x^9) 化简为(1+x+x^2)*(1+x^2+x^4)*(1+x^9 ...
- struts2配置文件中action的name属性
struts2配置文件中action的name属性的第一个字符不要加斜杠 <action name="see" class="baoxiuManage_seeAct ...
- 读写txt文件
public void SetUpdateTime(string strNewDate) { try { var path =Application.StartupPath + Configurati ...
- spring webservice 开发demo (实现基本的CRUD 数据库采用H2)
在实现过程中,遇到两个问题: 1: schema 写错: 错误: http://myschool.com/schemas/st 正确: http://myschool.com/st/schemas ...