[题解]UVA10129 单词 Play on Words
将各字母看做节点,单词的首字母向尾字母连一条有向边。最终如果该图存在欧拉通路,则答案合法。
回顾一下欧拉通路的判定:
- 有向图是欧拉图\(\iff\)非零度节点弱连通,每个节点出入度相等
- 有向图是半欧拉图\(\iff\)非零度节点弱连通,恰有一个节点出度\(-\)入度\(=1\),恰有一个节点入度\(-\)出度\(=1\),其他节点出入度相等。
上面两个条件满足其一即可。
我们将所有边看做无向边,用并查集维护连通性,即可实现弱连通的判定。
具体来说,每添加一条边\((u,v)\)就合并\(u,v\)所在集合,最终所有非零度(根据判定条件)节点都在一个集合中\(\iff\)该图联通。
用并查集的话,就不需要建图了。
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n,in[26],out[26],fa[26];
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
void init(){
memset(in,0,sizeof in),memset(out,0,sizeof out);
for(int i=0;i<26;i++) fa[i]=i;
}
bool solve(){
for(int i=0,p=-1;i<26;i++){
if(!in[i]&&!out[i]) continue;
if(find(i)!=p&&(~p)) return 0;
p=fa[i];
}
int cnts=0,cnte=0;
for(int i=0;i<26;i++){
if(in[i]==out[i]) continue;
if(out[i]-in[i]==1) cnts++;
else if(in[i]-out[i]==1) cnte++;
else return 0;
}
return (!cnts&&!cnte)||(cnts==1&&cnte==1);
}
signed main(){
cin>>t;
while(t--){
cin>>n;
init();
for(int i=1;i<=n;i++){
string s;cin>>s;
int l=s[0]-'a',r=s[s.size()-1]-'a';
in[r]++,out[l]++;
l=find(l),r=find(r);
if(l!=r) fa[l]=r;
}
cout<<(solve()?"Ordering is possible.\n":"The door cannot be opened.\n");
}
return 0;
}
附上无向图版本:P1333 瑞瑞的木棍(题解)
[题解]UVA10129 单词 Play on Words的更多相关文章
- [LeetCode题解]79. 单词搜索
题目描述 题目:79. 单词搜索 解题思路 遍历 首先找重复性,题目说给定单词是否存在于二维数组中,可以简化为从 (x, y) 走 n 步(n 表示单词长度),查看给定单词是否存在.然后再遍历二维数组 ...
- [题解]UVA10129 Play on Words
链接:http://vjudge.net/problem/viewProblem.action?id=19492 描述:单词接龙 思路:求欧拉回路或欧拉道路. 首先建图,以字母为节点,单词为边.因为单 ...
- C#版(击败100.00%的提交) - Leetcode 151. 翻转字符串里的单词 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- C#版(击败97.76%的提交) - Leetcode 557. 反转字符串中的单词 III - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...
- BZOJ4567:[SCOI2016]背单词——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4567 Lweb 面对如山的英语单词,陷入了深深的沉思,“我怎么样才能快点学完,然后去玩三国杀呢?” ...
- [SCOI2016]背单词 题解
背单词 https://www.luogu.com.cn/problem/P3294 前言: Trie树的省选题(瑟瑟发抖QAQ) 问题汇总:(请忽略) (1)对Trie字典树的运用不熟练 (2)没想 ...
- HDU 2072(单词数)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] “就是统计一篇文章里不同单词的总数”(已经是一句话了..) [题目分析] 明显需要去重,上set,因为按行分析,又没有EOLN用 ...
- PAT甲题题解-1071. Speech Patterns (25)-找出现最多的单词
分割字符串的用法+map映射给出input中出现次数最多的单词,如果次数相同,给出按字典序最小的. 这里我用了自定义分隔符来读取字符串,方法如下: //按照定义的分隔符d来分割字符串,对str进行读取 ...
- BZOJ3172:[TJOI2013]单词——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3172 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单 ...
- 例题6-16 单词 UVa10129
1.题目描写叙述:点击打开链接 2.解题思路:本题利用欧拉回路存在条件解决. 能够将全部的单词看做边,26个字母看做端点,那么本题事实上就是问是否存在一条路径,能够到达全部出现过的字符端点. 因为本题 ...
随机推荐
- HashMap的数据结构和源码分析
如果想透彻理解什么是HashMap,首先需要知道HashMap的数据结构是什么:其次需要厘清它能做什么,即它的功能:最后,还需要知道HashMap怎么实现这些功能的.下面我们针对这三个方面展开剖析. ...
- Helm仓库管理
概述 官方文档:https://helm.sh/zh/docs/topics/chart_repository/ 官方仓库:https://artifacthub.io/ Helm 仓库(Reposi ...
- 「Log」2023.8.25 小记
序幕 到校同学都没来,先摆. 写博客,写啊,写啊. 改费用流板子. \(\color{royalblue}{P3381\ [模板]最小费用最大流}\) 板子. 痛心疾首,建边的时候费用边反边为负权边. ...
- code-generator的简单介绍
代码生成器 介绍 client-go为每种k8s内置资源提供了对应的clientset和informer.那么我们要监听和操作自定义资源对象,应该如何做呢? 方式一:使用client-go提供的dyn ...
- 如何基于three.js(webgl)引擎架构,实现3D密集架库房,3D档案室智能巡检
前言: 看了一下 距离上篇课程发布,一年多了.这一年多来也迷茫,也怀疑,在AI时代,是不是失去了写文章的意义了.切身感受到那种面对科技浪潮时的迷茫和无力感.当AI能写出流畅.结构清晰的文章,甚至模 ...
- python之package定义
一.简单说明 python是通过module组织代码的,每一个module就是一个python文件,但是modules是通过package来组织的.我们平时在简单测试的时候 一般就是几个Python文 ...
- 大湿的超神之路第1期——同时学习6种计算机语言的我已经无敌了(1)——使用5种语言书写Fuck you the world!
为了成为物联网全寨式工程师,我决定要开始我的逆天之旅.有几种开发过程中很重要的语言,C还有java还有python还有javascript是我的重点对象,然后因为还想学C#写一点桌面小程序所以就骚一波 ...
- EasyMR6.2 全面解读:四大功能深度优化,解锁全新大数据处理和计算体验
在刚刚过去的2024春季发布会上,袋鼠云带来了数栈产品V6.2版本的全新发布.其中,EasyMR 作为数栈V6.2中的一项关键能力,代表了袋鼠云对大数据生态的深入理解和持续创新. EasyMR(后文统 ...
- 倒带ChunJun,同心前行|2022年度回顾&2023年共建规划
ChunJun是一个开始于2018年的批流一体数据集成框架项目,原名FlinkX.2022年2月22日,在FlinkX进行初版开源的整整四年后,技术团队决定对FlinkX进行整体升级,并更名为Chun ...
- springBoot项目打包并部署centos7
打包 部署centos7首准备好jdk环境将jar复制到指定的地方启动服务: nohup java -jar inner-analysis-center-1.0.0.jar --spring.prof ...