例题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& ...
随机推荐
- APUE 学习笔记(一) Unix基础知识
1. Unix 体系结构 内核的接口被称为系统调用 公用函数库构建在系统调用接口之上 应用软件既可以调用公用函数库,也可以直接进行系统调用 2. 文件和目录 目录操作函数:opendir--- ...
- 几个类和Table的方法
public class TableHelper { public static DataTable CreateTableFromClass(Type t) { DataTable dt = new ...
- JS判断SharePoint页面编辑状态
这篇博客主要讲使用不同的客户端方式来判断页面的编辑模式. 1.当页面处于发布状态时,可以使用下面两种方式:if(g_disableCheckoutInEditMode == true) { ale ...
- 前端居中模板(常用HTML模板)
0.效果:
- hdu 5971 Wrestling Match 二分图染色
题目链接 题意 \(n\)人进行\(m\)场比赛,给定\(m\)场比赛的双方编号:再给定已知的为\(good\ player\)的\(x\)个人的编号,已知的为\(bad\ player\)的\(y\ ...
- 内核的bootmem内存分配器【转】
转自:http://blog.csdn.net/zmxiangde_88/article/details/8041040 版权声明:本文为博主原创文章,未经博主允许不得转载. 在内核启动期间,伙伴系统 ...
- python,django,mysql学习之环境安装配置
参考:https://docs.djangoproject.com/en/1.6/intro/tutorial01/ http://rainyang.blog.51cto.com/469543/115 ...
- Codeforces 622C Not Equal on a Segment 【线段树 Or DP】
题目链接: http://codeforces.com/problemset/problem/622/C 题意: 给定序列,若干查询,每个查询给定区间和t,输出区间内任意一个不等于t的元素的位置. 分 ...
- Tyvj——P1864 [Poetize I]守卫者的挑战
来源:http://www.tyvj.cn/p/1864 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过.“我,Niz ...
- 济南day6
上午 60+0+5 数组开小了 暴力打挂了 下午 0+0+30 T1爆零 //T1,T2文件打错了.... 暴力打挂