题意:每一个单词的长度最小2,最大1000,单词开头的字母和另外一个单词的末尾一样就可以连接起来,解所有的单词是不是都可以连接起来,没有遗漏的

把每一个单词的第一个字母当成一个结点,最后一个单词也作为一个结点,表示第一个字母有一条路径走到最后一个单词,题目的意思就转化为,单词开头字母和结尾

字母组成的图是不是一个联通图,并且这个图存在欧拉通路.

欧拉通路判定(不一定是成环),图中只有俩个结点的度是奇数,终点的入度比出度大1,起点的出度比入度大1,其他点的入度必须等于出度.

欧拉通路的判断+起点和终点的出度等于入度那就是欧拉回路了,但是这个题只要判断通路.

使用了并查集判断图是否联通.

AC时间:30ms

#include <iostream>
#include<stdio.h>
#include<math.h>
#include<memory.h>
using namespace std; int const max = 'z';
int const min = 'a';
int const length = 'z' - 'a' + 1;
void _init(int *a, int length);
int find(int key, int *a);
void join(int k1, int k2, int *a); int main()
{
freopen("d:\\1.txt", "r", stdin);
int c;
cin >> c;
string yes = "Ordering is possible.";
string no = "The door cannot be opened.";
while (c--)
{
int n;
cin >> n;
string str;
if (n == 1)
{
cin >> str;
cout << yes << endl;
continue;
}
int set[length];
int duIn[length];
int duOut[length];
int vis[length];
memset(vis, 0, sizeof(vis));
memset(duIn, 0, sizeof(duIn));
memset(duOut, 0, sizeof(duIn));
_init(set, length);
while (n--)
{
cin >> str;
int s, e;
s = str[0];
s -= 'a';
e = str[str.length() - 1];
e -= 'a';
duOut[s]++;
duIn[e]++;
vis[s] = 1;
vis[e] = 1;
join(s, e, set);
}
//判断度和根结点
int p = -1;
int s = 0;
int ok = 1;
for (int i = 0; i < length; i++)
{
if (!vis[i])
continue;
int key = find(i, set);
if (p == -1)
{
p = key;
}
else if (key != p)
{
ok = 0;
break;
}
if (duIn[i] != duOut[i])
{
int t = duIn[i] - duOut[i];
if ((t == -1 || t == 1) && (s <= 1))
{
t++;
}
else
{
ok=0;
break;
}
}
}
if (ok)
cout << yes << endl;
else
cout << no << endl; }
return 0;
} void join(int k1, int k2, int* a)
{
int p1 = find(k1, a);
int p2 = find(k2, a);
if (p1 != p2)
a[p1] = p2;
} int find(int key, int *a)
{
return key == a[key] ? key : a[key] = find(a[key], a);
} void _init(int* a, int length)
{
for (int i = 0; i < length; i++)
a[i] = i;
}

  

uva-10129-欧拉通路的更多相关文章

  1. UVA 10129 Play on Words (欧拉通路)

    本文链接:http://www.cnblogs.com/Ash-ly/p/5398627.html 题意: 输入N(N <= 100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单 ...

  2. UVa 12118 检查员的难题 (dfs判连通, 构造欧拉通路)

    题意: 分析: 欧拉通路:图连通:图中只有0个或2个度为奇数的结点 这题我们只需要判断选择的边构成多少个联通块, 再记录全部联通块一共有多少个奇度顶点. 然后我们在联通块中连线, 每次连接两个联通块就 ...

  3. Uva10129 - Play on Words 欧拉通路 DFS

    题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=105& ...

  4. FZU 2112 并查集、欧拉通路

    原题:http://acm.fzu.edu.cn/problem.php?pid=2112 首先是,票上没有提到的点是不需要去的. 然后我们先考虑这个图有几个连通分量,我们可以用一个并查集来维护,假设 ...

  5. POJ 2337 Catenyms(有向图的欧拉通路)

    题意:给n个字符串(3<=n<=1000),当字符串str[i]的尾字符与str[j]的首字符一样时,可用dot连接.判断用所有字符串一次且仅一次,连接成一串.若可以,输出答案的最小字典序 ...

  6. POJ 1780 Code(有向图的欧拉通路)

    输入n(1<=n<=6),输出长度为10^n + n -1 的字符串答案. 其中,字符串以每n个为一组,使得所有组都互不相同,且输出的字符串要求字典序最小. 显然a[01...(n-1)] ...

  7. HDU1116 Play on Words(有向图欧拉通路)

    我把单词当作点,然后这样其实是不对的,这样就要判定是否是哈密顿通路.. 这题应该把单词的首尾单词当作点,而单词本身就是边,那样就是判定欧拉通路了. 有向图包含欧拉通路的充要条件是:首先基图连通,然后是 ...

  8. 欧拉通路-Play on Words 分类: POJ 图论 2015-08-06 19:13 4人阅读 评论(0) 收藏

    Play on Words Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10620 Accepted: 3602 Descri ...

  9. POJ 2513 Colored Sticks (离散化+并查集+欧拉通路)

    下面两个写得很清楚了,就不在赘述. http://blog.sina.com.cn/s/blog_5cd4cccf0100apd1.htmlhttp://www.cnblogs.com/lyy2890 ...

  10. POJ 1386 有向图欧拉通路

    题意:给你一些字符串,这些字符串可以首位相接(末位置如果和另一个字符串的首位置相同的话就可以相连) .然后问你是否可以全部连起来. 思路:就是取出每个字符串的首尾位置,然后求出出度和入度,根据有向欧拉 ...

随机推荐

  1. unbtu使用笔记

    安装fcitx输入法: sudo apt-get install fcitx-table-wbpy 再配置http://www.cnblogs.com/imsoft/p/4368550.html vi ...

  2. Unity 3D游戏-见缝插针源码

    Unity见缝插针功能实现 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Sphere Rotatio ...

  3. # 20155327 2016-2017-4 《Java程序设计》第七周学习总结

    20155327 2016-2017-4 <Java程序设计>第七周学习总结 教材学习内容总结 了解Lambda语法 包含三个部分 一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法 ...

  4. jquery中not的用法[.not(selector)]

    描述: 从匹配的元素集合中移除指定的元素. 如果提供的jQuery对象代表了一组DOM元素,.not()方法构建一个新的匹配元素的jQuery对象,用于存放筛选后的元素.所提供的选择器是对每个元素进行 ...

  5. 【vue】Vue调试神器vue-devtools安装

    转载:https://segmentfault.com/a/1190000009682735 前言 vue-devtools是一款基于chrome游览器的插件,用于调试vue应用,这可以极大地提高我们 ...

  6. UVA10590 Boxes of Chocolates Again

    题意 将正整数N拆分成若干个正整数之和,问有多少种不重复的拆分方案. \(n \leq 5000\) 分析 用f(i,j)表示将i拆成若干个数字,最大的那个数字(即最后一个数)不超过j的方案数. 转移 ...

  7. 编辑文章 - 博客频道 - CSDN.NET

    站点连接 :http://www.gaoshou.me/uid/19125624    不用不知道,一用吓一跳. 每一个月的手机话费不用愁了. 仅限苹果手机 1.同步请求能够从因特网请求数据.一旦发送 ...

  8. Tensorflow & Python3 做神经网络(视频教程)

    Tensorflow 简介 1.1 科普: 人工神经网络 VS 生物神经网络 1.2 什么是神经网络 (Neural Network) 1.3 神经网络 梯度下降 1.4 科普: 神经网络的黑盒不黑 ...

  9. 【转】Ubuntu添加PATH环境变量

    原文网址:http://www.cnblogs.com/pang123hui/archive/2011/05/28/2309889.html 添加分两种: 一.临时性添加 ~$ echo $PATH  ...

  10. MySQL: ON DUPLICATE KEY UPDATE 用法

    使用该语法可在插入记录的时候先判断记录是否存在,如果不存在则插入,否则更新,很方便,无需执行两条SQL INSERT INTO osc_visit_stats(stat_date,type,id,vi ...