题目链接: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=+;
int pa[];
int findset(int x)//找到它的祖先
{
if(pa[x]==x) return pa[x];
return pa[x]=findset(pa[x]);
} int used[],deg[];//是否出现过 度数 int main()
{
int T;
cin>>T;
while(T--)
{
int n;
char word[maxn];
cin>>n;
memset(used,,sizeof(used));
memset(deg,,sizeof(deg));
for(int ch='a';ch<='z';ch++) pa[ch]=ch;//初始化并查集
int cc=;//连通块个数 for(int i=;i<n;i++)
{
cin>>word;
char c1=word[],c2=word[strlen(word)-];
deg[c1]++;//出度的话 ++
deg[c2]--;//入度 --
used[c1]=used[c2]=;//标记为出现过
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]!=) d.push_back(deg[ch]);//出度和入度不相等的结点
//=0代表出度和入度相等的结点 不需要考虑
}
bool ok=false;
if(cc==&&(d.empty()||(d.size()==&&(d[]==||d[]==-)))) ok=true;//cc=1代表只剩下一个块 为空代表成环 不为空 为2的话 一个是出度一个是入度
if(ok) cout<<"Ordering is possible."<<endl;
else cout<<"The door cannot be opened."<<endl;
}
return ;
}

Play on Words UVA - 10129 (欧拉回路)的更多相关文章

  1. 【紫书】Play on Words UVA - 10129 欧拉回路

    题意:给你1e5个字符串,若前一个的末尾字母等于当前的首字母,则可以连在一起(成语接龙一个意思)判断是否可以将他们连在一起 题解:将首位看作点,单词看作边.变成欧拉回路问题. 判断出入度是否相等,再用 ...

  2. Play on Words UVA - 10129 欧拉路径

    关于欧拉回路和欧拉路径 定义:欧拉回路:每条边恰好只走一次,并能回到出发点的路径欧拉路径:经过每一条边一次,但是不要求回到起始点 ①首先看欧拉回路存在性的判定: 一.无向图每个顶点的度数都是偶数,则存 ...

  3. UVa 10129单词(欧拉回路)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

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

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

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

    思路: 分别存下每个字符串的首尾字符,以字符为结点,单词看作一条变,就变成了求欧拉回路了,先判断下图是否连通,然后根据欧拉回路的结论:最多只能有两个点的入读不等于初读,而且必须是一个点的出度恰好比入度 ...

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

    题意:将n个单词排成一个序列,保证相邻单词相邻处字母相同. 分析:每个单词看做一条有向边,字母为点,并查集看图是否连通,因为是有向图,所以最多只能有两个点入度不等于出度,且这两个点一个入度比出度大1, ...

  7. Uva 10129 单词

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

  8. Uva 10129 - Play on Words 单词接龙 欧拉道路应用

    跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...

  9. Uva 10054 欧拉回路 打印路径

    看是否有欧拉回路 有的话打印路径 欧拉回路存在的条件: 如果是有向图的话 1.底图必须是连通图 2.最多有两个点的入度不等于出度 且一个点的入度=出度+1 一个点的入度=出度-1 如果是无向图的话 1 ...

随机推荐

  1. 使用paramiko连接EC2主机

    在亚马逊云上建的主机没有密码,只有一个PEM文件.所以paramiko需要通过该PEM文件登录云主机进行管理 有两种方式,第一种被我注解了 import paramiko ssh = paramiko ...

  2. com.fasterxml.jackson.databind.JavaType.isReferenceType

    <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-map ...

  3. Mac下的UI自动化测试 (二)

    下面讲一下Sikuli的重要概念,就是region,所谓region就是Sikuli在进行图像识别的时候的一个区域,默认是整个屏幕. 当然,如果region选得太大的话,并且UI上存在相似的控件,那么 ...

  4. ASP.NET Core 中的中间件

    前言   由于是第一次写博客,如果您看到此文章,希望大家抱着找错误.批判的心态来看. sky! 何为中间件? 在 ASP.NET Framework 中应该都知道请求管道.可参考:浅谈 ASP.NET ...

  5. Winform 数据库连接配置界面

    一.添加引用       C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\Microsoft.Data.ConnectionUI.Dial ...

  6. 【bzoj2242】: [SDOI2011]计算器 数论-快速幂-扩展欧几里得-BSGS

    [bzoj2242]: [SDOI2011]计算器 1.快速幂 2.扩展欧几里得(费马小定理) 3.BSGS /* http://www.cnblogs.com/karl07/ */ #include ...

  7. P2245 星际导航 瓶颈路

    \(\color{#0066ff}{ 题目描述 }\) sideman 做好了回到 \(\text{Gliese}\) 星球的硬件准备,但是 \(\text{sideman}\) 的导航系统还没有完全 ...

  8. luogu2723 丑数

    提供一种单调队列做法(非正解) 显然每一个丑数能够由一个质数乘以另一个丑数得到 所以我们开k个单调递增队列,每次从这些队列顶部找到一个最小的元素把他捞出来,然后枚举所有质数,用这个元素乘以质数,放入相 ...

  9. spring boot 下websocket实现的两种方法

    websocket前台实现代码,保存为html执行就好 html代码来自:https://blog.csdn.net/M348915654/article/details/53616837 <h ...

  10. Redis学习笔记(4)—— Jedis入门

    一.Jedis介绍 Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如Java.C.C#.C++.php.Node.js.Go等. 在官方网站里列的一些Java客户端,有jedi ...