例题6-16 单词 UVa10129
1.题目描写叙述:点击打开链接
2.解题思路:本题利用欧拉回路存在条件解决。
能够将全部的单词看做边,26个字母看做端点,那么本题事实上就是问是否存在一条路径,能够到达全部出现过的字符端点。
因为本题还要求了两个单词拼在一起的条件是前一个单词的右端点和本单词的左端点一样。所以这是一个有向图。依据结论:有向图的底图(忽略边的方向后的图)必须连通;有向图中最多仅仅能有两个端点的入度不等于出度。且必须是当中一点的入度比出度小1,还有一点的入度比出度大1。因此先推断端点是否都连通,再推断每一个端点的度数是否满足结论就可以。
那么,怎样推断连通性呢?第一种方法是利用DFS。另外一种方法能够利用并查集。
本题利用并查集来推断是否连通。
3.代码:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<functional>
using namespace std; #define N 100000+10
int u[N], v[N];
int din[26], dout[26],vis[26];
int p[N];
int n;
void clear()
{
memset(p, 0, sizeof(p));
memset(vis, 0, sizeof(vis));
memset(din, 0, sizeof(din));
memset(dout, 0, sizeof(dout));
}
int find(int x)
{
return p[x] == x ? x : p[x] = find(p[x]);
}
bool is_connected()//利用并查集来推断底图是否连通
{
for (int i = 0; i < 26; i++)p[i] = i;
for (int i = 0; i < n; i++)
{
int x = find(u[i]), y = find(v[i]);
if (x != y)p[x] = y;
}
int i = 0;
for (i; !vis[i]; i++);
int x = find(i);
for (int j = i + 1; j < 26;j++)
if (vis[j])
{
int y = find(j);
if (x != y)return false;
}
return true;
} int main()
{
//freopen("t.txt", "r", stdin);
int T;
scanf("%d", &T);
while (T--)
{
clear();
scanf("%d", &n);
char s[1000 + 10];
for (int i = 0; i < n; i++)
{
scanf("%s", s);
int len = strlen(s);
u[i] = s[0] - 'a', v[i] = s[len - 1] - 'a';
dout[u[i]]++, din[v[i]]++;//统计入度,出度
vis[u[i]] = 1, vis[v[i]] = 1; //标记出现过的字符
}
int ok = 1;
if (is_connected())
{
int cnt = 0;
for (int i = 0; i < 26;i++)
if (vis[i])
{
if (din[i] != dout[i])
{
if (din[i] == dout[i] - 1)cnt++;
else if (din[i] == dout[i] + 1)cnt++;
else{ ok = 0; break; }
}
if (cnt>2){ ok = 0; break; }
}
}
else ok = 0;
if (ok)puts("Ordering is possible.");
else puts("The door cannot be opened.");
}
return 0;
}
例题6-16 单词 UVa10129的更多相关文章
- C. 【例题3】单词替换
C . [ 例 题 3 ] 单 词 替 换 解析 可以一个个单词读取,输入完之后, 讲整个句子的每个单词遍历一次, 如果这个单词是与单词 a a a相同的话, 就输出 b b b, 否则输出这个单词 ...
- 6-16 单词 uva10129
了解了欧拉回路和欧拉道路的性质 : 欧拉道路 最多只有两个奇点(不可能只有一个奇点) 并且当有两个奇点的时候 一个奇点入比出多一 一个奇点出比入多一 采用并查集查看是否连同 如果连 ...
- C# 正则表达式
引用自:http://www.cnblogs.com/stg609/archive/2009/06/03/1492709.html 摘要:正则表达式(Regular Expressions),相信做软 ...
- C#基础回顾:正则表达式
C#基础回顾:正则表达式 写在前面:本文根据笔者的学习体会结合相关书籍资料对正则表达式的语法和使用(C#)进行基本的介绍.适用于初学者. 摘要:正则表达式(Regular Expressions),相 ...
- C#基础回顾:正则表达式-转
写在前面:本文根据笔者的学习体会结合相关书籍资料对正则表达式的语法和使用(C#)进行基本的介绍.适用于初学者. 摘要:正则表达式(Regular Expressions),相信做软件开发的朋友或多或少 ...
- OI题目类型总结整理
## 本蒟蒻的小整理qwq--持续更新(咕咕咕) 数据结构 数据结构 知识点梳理 数据结构--线段树 推荐yyb dalao的总结--戳我 以后维护线段树还是把l,r写到struct里面吧,也别写le ...
- (浙江金华)Day 1 组合数计数
目录 Day 1 组合计数 1.组合数 (1).C(n,m) 读作n选m,二项式系数 : (2).n个东西里选m个的方案数 不关心选的顺序: (3).二项式系数--->多项式系数: 2.组合数计 ...
- 浅析 AC 自动机
目录 简述 AC 自动机是什么 AC 自动机有什么用 AC 自动机·初探 AC 自动机·原理分析 AC 自动机·代码实现 AC 自动机·更进一步 第一题 第二题 第三题 从 AC 自动机到 fail ...
- ybt的坑
emmmm ybt 字符串处理 例2题解错了 AC自动机板子错了(据说) 另外字符串处理的题解写的我一脸懵逼 网站上eeeee 点击查看E. 1.排队接水 #include <iostream& ...
随机推荐
- Censoring(bzoj 3940)
Description Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so ...
- 应用node+express+mysql 实现简单的增删改查
记录下来备忘 1.准备好webstrom编辑器,编辑器调整字体大小等在file->settings->editor下设置 注册码 来源网上: 2017.2.27更新 选择“license ...
- 去掉 NavigationBar 底部的那条黑线
//加入下面两行代码即可[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UI ...
- linux下网络监控神器"iptraf-ng"
优点:监控的网络信息很全面,安装和使用方便 #centos安装: #yum 源使用centos自带的base源即可. yum install -y iptraf-ng #运行 iptraf-n ...
- HDU 4746 Mophues【莫比乌斯反演】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4746 题意: 1≤x,y≤n , 求gcd(x,y)分解后质因数个数小于等k的(x,y)的对数. 分 ...
- 2017 CCPC 哈尔滨站 题解
题目链接 2017 CCPC Harbin Problem A Problem B Problem D Problem F Problem L 考虑二分答案. 设当前待验证的答案为x 我们可以把第二 ...
- 分享Kali Linux 2017年第11周镜像文件
分享Kali Linux 2017年第11周镜像文件 Kali?Linux官方于3月12日发布2017年的第11周镜像.这次维持了11个镜像文件的规模.默认的Gnome桌面的4个镜像,E17.KDE ...
- java retry:详解
发现 今天在探秘线程池原理知识点,在阅读JDK源码时遇到程序代码中出现如下代码,因为之前没有遇到过,于是特地记录下来并谷歌了一番,后面我自己做了一些简要的验证和分析. 验证 网上溜达一番发现,这ret ...
- JSP页面顶端出现错误:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path的问题解决
原理:把RunTime容器添加进去,比如tomcat的. 1.项目右键->[Build Path]->[Configure Build Path...] 2.把tomcat的runtime ...
- SQL-基础学习2--ORDER BY ,DESC,WHERE, BETWEEN,AND ,OR ,IN ,NOT
所使用的数据库资料在:数据库资料 第三课:排序检索数据 3.1 排序数据 按单列排序 如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序.但是,如果数据随后进行 ...