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的更多相关文章

  1. C. 【例题3】单词替换

    C . [ 例 题 3 ] 单 词 替 换 解析 可以一个个单词读取,输入完之后, 讲整个句子的每个单词遍历一次, 如果这个单词是与单词 a a a相同的话, 就输出 b b b, 否则输出这个单词 ...

  2. 6-16 单词 uva10129

    了解了欧拉回路和欧拉道路的性质 : 欧拉道路  最多只有两个奇点(不可能只有一个奇点)     并且当有两个奇点的时候  一个奇点入比出多一   一个奇点出比入多一 采用并查集查看是否连同   如果连 ...

  3. C# 正则表达式

    引用自:http://www.cnblogs.com/stg609/archive/2009/06/03/1492709.html 摘要:正则表达式(Regular Expressions),相信做软 ...

  4. C#基础回顾:正则表达式

    C#基础回顾:正则表达式 写在前面:本文根据笔者的学习体会结合相关书籍资料对正则表达式的语法和使用(C#)进行基本的介绍.适用于初学者. 摘要:正则表达式(Regular Expressions),相 ...

  5. C#基础回顾:正则表达式-转

    写在前面:本文根据笔者的学习体会结合相关书籍资料对正则表达式的语法和使用(C#)进行基本的介绍.适用于初学者. 摘要:正则表达式(Regular Expressions),相信做软件开发的朋友或多或少 ...

  6. OI题目类型总结整理

    ## 本蒟蒻的小整理qwq--持续更新(咕咕咕) 数据结构 数据结构 知识点梳理 数据结构--线段树 推荐yyb dalao的总结--戳我 以后维护线段树还是把l,r写到struct里面吧,也别写le ...

  7. (浙江金华)Day 1 组合数计数

    目录 Day 1 组合计数 1.组合数 (1).C(n,m) 读作n选m,二项式系数 : (2).n个东西里选m个的方案数 不关心选的顺序: (3).二项式系数--->多项式系数: 2.组合数计 ...

  8. 浅析 AC 自动机

    目录 简述 AC 自动机是什么 AC 自动机有什么用 AC 自动机·初探 AC 自动机·原理分析 AC 自动机·代码实现 AC 自动机·更进一步 第一题 第二题 第三题 从 AC 自动机到 fail ...

  9. ybt的坑

    emmmm ybt 字符串处理 例2题解错了 AC自动机板子错了(据说) 另外字符串处理的题解写的我一脸懵逼 网站上eeeee 点击查看E. 1.排队接水 #include <iostream& ...

随机推荐

  1. net3:DropDownList的动态绑定

    原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System.Data;using System.Configuration;using System ...

  2. 用node写的一个后台框架

    server.js var http=require('http') var handleUrl=require('./handleUrl') var config = require('./conf ...

  3. docker mysql 导入导出数据

    导出数据 1.导出mysql单张表结构和数据: docker exec -it my-mysql mysqldump dbname -uroot -p123456 --tables tname > ...

  4. Scrollview总结:滑动问题、监听Scrollview实现头部局改变

    ScrollView就是一个可以滚动的View,这个滚动的方向是垂直方向的,而HorizontalScrollView则是一个水平方向的可以滚动的View. ScrollView的简单介绍 Scrol ...

  5. Echarts-之显示百分比

    对于使用echarts要显示百分比,要改两个地方,第一个地方时坐标轴显示为百分比的格式,第二个是让值以百分比的形式显示,如50,在图上面显示为50%. yAxis: [ { type: 'value' ...

  6. .Net Core中的配置文件源码解析

    一.配置简述 之前在.Net Framework平台开发时,一般配置文件都是xml格式的Web.config,而需要配置其他格式的文件就需要自己去读取内容,加载配置了..而Net Core支持从命令行 ...

  7. MY JAVA-NOTE FIRST DAY

    今天是第一天开通博客,我很开心,总算拥有了自己的博客了,以后我会经常在博客里分享一些JAVA的心得.

  8. ubuntu 配置 django

    安装 安装Apache sudo apt-get install apache2 安装Django 下载Django 安装mod_wsgi sudo apt-get install libapache ...

  9. SQLAlchemy的查询操作Query

    查询操作 查询子句使用session的.query()方法来获取Query查询对象.查询对象能够使用一些方法来对应一些查询子句,比如.order_by(),.limit(),.filter()等. 查 ...

  10. 纯CSS3美化radio和checkbox

    如题,主要通过CSS3来实现将radio和checkbox美化的效果.可是兼容性并非非常好,PC端仅仅支持chrome浏览器(IE和Firefox測试不行,其它没有很多其它測试).然后微信端和QQ端訪 ...