Uva 10129 单词
题目链接:https://uva.onlinejudge.org/external/101/10129.pdf
把单词的首字母和最后一个字母看做节点,一个单词就是一个有向边。有向图的欧拉定理,就是除了起点和终点外,其他的点,出度等于入度,而且,起点和终点的出度和入度相差 1 ,这个在上一篇文章中证明了。
然后就是查连通:
1、DFS ——从一个点出发,搜索所有相邻的边,继续dfs(v)并标记,最后查图,是不是所有点都标记了。
2、并查集 ——最多有26个块,有一条新边来了,并且,祖先不同,就相连,并且,块减 1 ,最后排除那些没有出现的点后,看是不是只有一个块了。
#include <bits/stdc++.h>
using namespace std; const int Maxn = ; int father[Maxn];
int degree[Maxn];
int used[Maxn]; int Find_Set(int x)
{
if(x!=father[x])
father[x] = Find_Set(father[x]);
return father[x];
} int main()
{
int T;
scanf("%d",&T);
while(T--) {
int n;
scanf("%d",&n);
char str[]; memset(used,,sizeof(used));
memset(degree,,sizeof(degree)); for(int a='a';a<='z';a++)
father[a] = a; int flag = ; for(int i=;i<n;i++) {
scanf("%s",str); char c1 = str[];
char c2 = str[strlen(str)-]; used[c1] = used[c2] = ; degree[c1] ++;
degree[c2] --; int fx = Find_Set(c1);
int fy = Find_Set(c2); if(fx!=fy) {
father[fy] = fx;
flag --;
}
} vector<int> vaj;
for(int a = 'a';a<='z';a++)
if(!used[a])
flag--;
else {
if(degree[a]!=)
vaj.push_back(degree[a]);
}
sort(vaj.begin(),vaj.end()); if(flag!=)
puts("The door cannot be opened.");
else if(vaj.size()==||(vaj.size()==&&vaj[]==-&&vaj[]==))
puts("Ordering is possible.");
else puts("The door cannot be opened."); }
return ;
}
Uva 10129 单词的更多相关文章
- UVa 10129单词(欧拉回路)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 10129 单词 (欧拉通路)
题意: 输入n(n≤100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同(例如acm.malform.mouse).每个单词最 多包含100 ...
- Play on Words UVA - 10129 欧拉路径
关于欧拉回路和欧拉路径 定义:欧拉回路:每条边恰好只走一次,并能回到出发点的路径欧拉路径:经过每一条边一次,但是不要求回到起始点 ①首先看欧拉回路存在性的判定: 一.无向图每个顶点的度数都是偶数,则存 ...
- Uva 10129 - Play on Words 单词接龙 欧拉道路应用
跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...
- 单词 (Play on Words UVA - 10129 )
题目描述: 原题:https://vjudge.net/problem/UVA-10129 题目思路: 1.明显是判断欧拉路径 2.欧拉路径的两个条件 a.图连通 b.至多为两个奇点,且一个为起点一个 ...
- uva 10129 play on words——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABNUAAANeCAYAAAA1BjiHAAAgAElEQVR4nOydabWsuhaFywIasIAHJK
- UVa 10129 (并查集 + 欧拉路径) Play on Words
题意: 有n个由小写字母的单词,要求判断是否存在某种排列使得相邻的两个单词,前一个单词末字母与后一个单词首字母相同. 分析: 将单词的两个字母看做节点,则一个单词可以看做一条有向边.那么题中所求的排列 ...
- UVa 10129 Play On Words【欧拉道路 并查集 】
题意:给出n个单词,问这n个单词能否首尾接龙,即能否构成欧拉道路 按照紫书上的思路:用并查集来做,取每一个单词的第一个字母,和最后一个字母进行并查集的操作 但这道题目是欧拉道路(下面摘自http:// ...
- UVA - 10129 Play on Words(欧拉回路+并查集)
2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个 ...
随机推荐
- [Reprint]C++友元函数与拷贝构造函数详解
这篇文章主要介绍了C++友元函数与拷贝构造函数,需要的朋友可以参考下 一.友元函数 1.友元函数概述: (1)友元函数是定义在一个类外的普通函数.友元函数和普通函数的定义一样;在类内必须将该普通函 ...
- Java基础(51):Super与this的区别
1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位. class Base { Base() { System.out.println("Base" ...
- Java基础(40):Java中的集合介绍---Collection与Map
集合类说明及区别Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap ...
- ajax常用参数
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址.前台跳转到后台 请求参数:前台向后台传数据 回调函数:回调函数就是一个自定义的函数在发生特定的事件的时候调用来处理这个事件 ...
- bzoj4448 [Scoi2015]情报传递
第一问不解释,对于第二问的处理,可以使用cdq分治,假设分治的询问区间是[L,R],那么我们对于标号在[L,mid]的修改操作赋予一个权值,因为在当前[L,R]中[L,mid]的修改操作只会对[mid ...
- word - 如何让 图片任意移动
选中图片, 设置图片的自动换行 为四周环绕型
- 修改linux下mysql目录权限
1.进入当前目录:例cd /srun3/mysql 2.修改权用户限 chown -R mysql ipt_authd_remote(表示给ipt_authd_remotemysql权限) 3.修改用 ...
- OpenStack主机列表接口
如之前讨论,openstack提供一套接口给运维管理平台,运维管理平台通过获取到的IP地址对主机进行监控. 接口名 请求地址 请求方法 请求cookie 请求头 返回值 返回值使用 登录 ...
- android 学习随笔十四(页面跳转与数据传递)
1.activity 创建第二个Activity 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> ...
- centos 7 systemctl
Linux Systemctl是一个系统管理守护进程.工具和库的集合,用于取代System V.service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器.通过Syst ...