【例题 6-16 UVa 10129】Play on Words】的更多相关文章

关于欧拉回路和欧拉路径 定义:欧拉回路:每条边恰好只走一次,并能回到出发点的路径欧拉路径:经过每一条边一次,但是不要求回到起始点 ①首先看欧拉回路存在性的判定: 一.无向图每个顶点的度数都是偶数,则存在欧拉回路. 二.有向图(所有边都是单向的)每个节顶点的入度都等于出度,则存在欧拉回路. ②.欧拉路径存在性的判定 一.无向图一个无向图存在欧拉路径,当且仅当   该图所有顶点的度数为偶数   或者  除了两个度数为奇数外其余的全是偶数. 二.有向图一个有向图存在欧拉路径,当且仅当  该图所有顶点的…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 入度减去出度个数为1的点和为-1的点各有1个,然后其他点入度减去出度为0 或者全都是入度为0的点即可. [代码] #include <bits/stdc++.h> using namespace std; const int N = 300; int n,du[N]; map <char,int> mmap; int f[N+10]; bool bo[N+10]; int ff(int x){ if (f[x]==…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 拓扑大水题 [代码] #include <bits/stdc++.h> using namespace std; const int N = 100; int n,m; int du[N+10]; vector <int> g[N+10]; queue <int> dl; int main(){ // freopen("rush.txt","r",stdin);…
题目链接:https://uva.onlinejudge.org/external/101/10129.pdf 把单词的首字母和最后一个字母看做节点,一个单词就是一个有向边.有向图的欧拉定理,就是除了起点和终点外,其他的点,出度等于入度,而且,起点和终点的出度和入度相差 1 ,这个在上一篇文章中证明了. 然后就是查连通: 1.DFS  ——从一个点出发,搜索所有相邻的边,继续dfs(v)并标记,最后查图,是不是所有点都标记了. 2.并查集 ——最多有26个块,有一条新边来了,并且,祖先不同,就相…
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1070 题意是输入n个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同.输入中可以有重复单词. 由于最后只需要判断是否能排成这样的一个序列,所以没有输入单词后,只需要把首尾字母保存下来,然后可以dfs深度递归.由于可能会有重复单词,在这里可以设…
跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图)连通性,用简单的DFS即可.如果图都不连通,一定不存在欧拉路 2.在条件1的基础上   对于欧拉回路,要求苛刻一点,所有点的入度都要等于出度,那么就存在欧拉回路了   对于欧拉道路,要求松一点,只有一个点,出度比入度大1,这个点一定是起点: 一个点,入度比出度大1,这个点一定是终点.其余点的出度等…
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABNUAAANeCAYAAAA1BjiHAAAgAElEQVR4nOydabWsuhaFywIasIAHJK…
题意: 有n个由小写字母的单词,要求判断是否存在某种排列使得相邻的两个单词,前一个单词末字母与后一个单词首字母相同. 分析: 将单词的两个字母看做节点,则一个单词可以看做一条有向边.那么题中所求的排列就等价于该有向图中是否存在欧拉路径. 在判断之前,首先要确定这个图是连通的,代码中用并查集来实现. 回顾一下存在欧拉路径的条件,全都是偶点或者有且仅有两个奇点.我们用deg来记录每个点的度,出度为1,入度为-1. 程序中判断存在欧拉路径的条件就是:deg全为0 或者 有两个不为0的,其中一个为1一个…
题意:给出n个单词,问这n个单词能否首尾接龙,即能否构成欧拉道路 按照紫书上的思路:用并查集来做,取每一个单词的第一个字母,和最后一个字母进行并查集的操作 但这道题目是欧拉道路(下面摘自http://blog.csdn.net/hcbbt/article/details/9316301) 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图)连通性,用简单的DFS即可.如果图都不连通,一定不存在欧拉路 2.在条件1的基础上   对于…
2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个单词的右端点和本单词的左端点一样.所以这是一个有向图.根据结论:有向图的底图(忽略边的方向后的图)必须连通:有向图中最多只能有两个端点的入度不等于出度,且必须是其中一点的入度比出度小1,另一点的入度比出度大1.因此先判断端点是否都连通,再判断每个端点的度数是否满足结论即可. 那么,如何判断连通性呢?…
欧拉回路 以字母为结点,单词为边:注意两个相同的单词表示两条边. 并查集判断是否连通,出度,入度判断是否是欧拉回路 #include <iostream> #include <cstring> #include <cstdio> using namespace std; ]; ][]; ][]; ],f[]; int father (int i){ f[i]=f[i]==i?f[i]:father (f[i]); return f[i]; } int main (){…
//本来是想练一下欧拉回路的,结果紫书上那题是大水题!!!!! 题意:给出n个单词,是否可以把单词排列成每个单词的第一个字母和上一个单词的最后一个字母相同 解:欧拉通路存在=底图联通+初度!=入度的点至多只有两个(分别为入点和出点) #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<cstdli…
主要是求能否形成联通的欧拉回路 并查集+ 欧拉回路判断 一开始用dfs判断联通,死活A不出来,Wa了好多次………哭…… 并查集一次就AC了 感觉还是并查集代码好写一点, 因为dfs还要判断入口在哪里……2333333 判断欧拉回路: 1.判断联通(dfs|并查集) 2.判断欧拉回路的条件(1.要么所有的点出度等于入度,2.要么只能有一个出度比入度大于1(入口),一个入度比出度小于1(出口)其他的点必须出度等于入度) 代码: #include <iostream> #include <cs…
Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has to solve it to open that doors. Because there is no other way to open the doors, the puzzle is very important for us.There is a large number of magnetic p…
题目链接: https://cn.vjudge.net/problem/UVA-10129 Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has to solve it to open that doors. Because there is no other way to open the doors, the puzzle is very importan…
思路: 分别存下每个字符串的首尾字符,以字符为结点,单词看作一条变,就变成了求欧拉回路了,先判断下图是否连通,然后根据欧拉回路的结论:最多只能有两个点的入读不等于初读,而且必须是一个点的出度恰好比入度大1(将它作为起点),另一个的入度比出度大1(将它作为终点): 实现代码: #include<iostream> #include<cstring> using namespace std; ; int f[M]; int in[M],out[M]; int fd(int x) {re…
题意:给你1e5个字符串,若前一个的末尾字母等于当前的首字母,则可以连在一起(成语接龙一个意思)判断是否可以将他们连在一起 题解:将首位看作点,单词看作边.变成欧拉回路问题. 判断出入度是否相等,再用并查集判一下连通性 (dfs/bfs也行:随便取一个点,搜索一遍.如果每个点都被标记,则是连通的.) ac代码: #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include<stdio.h> #include<a…
题意:给你n个字符串,问你是否可以出现一条链,保证链中每个字符串的第一个元素与上一个字符串的最后一个元素相同,注意可能重复出现同一个字符串 题解:以每一个字符串第一个元素指向最后一个元素形成一个有向图,判断这个有向图是否可以形成欧拉路就好 注意可能有重边与自环,因此求欧拉路时判断的是是否使用完了所有的边,求起点时注意出度与入度的计算 欧拉道路是从一个点一笔画完整张图(欧拉回路保证回到起点),注意除了起点与终点以外所有的点出度入度相等 起点出度大入度1,终点相反(所有的点出入度相等也可以),根据这…
题目描述: 原题:https://vjudge.net/problem/UVA-10129 题目思路: 1.明显是判断欧拉路径 2.欧拉路径的两个条件 a.图连通 b.至多为两个奇点,且一个为起点一个为重点 3.连通还是用DFS判断,奇点在输入时开两个数组统计出入度 AC代码 #include <iostream> #include <cstring> using namespace std; + ; int G[maxn][maxn],vis[maxn]; //图的实现和访问标记…
题目链接:https://vjudge.net/problem/UVA-10129 题目大意:输入N  代表有n个字符串  每个字符串最长1000  要求你把所有的字符串连成一个序列  每个字符串的第一个字母是前一个字符串的最后一个字母 思路:这是学的欧拉回路的第一道题 ,把单词的首字母和尾字母看做结点,单词看作边 ,判断能否找出一条欧拉回路就行了 首先要知道什么是欧拉回路: 第一个条件:图必须是连通的 第二个条件:最多只有两个奇点(出度和入度不相等的点) 满足上面两个条件的就是欧拉回路 如果有…
本文链接:http://www.cnblogs.com/Ash-ly/p/5398627.html 题意: 输入N(N <= 100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同(例如:acm,malform,mouse).每个单词最多包含 1000 个小写字母.输入中可以有重复的单词. 思路: 把一个字母的两端开成节点,单词看成有向边,若问题有借,当且仅当图中存在欧拉通路.所有只需要判断由单词而构建的图是否存在欧拉通路,由于是有向边,…
题意: 输入n(n≤100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同(例如acm.malform.mouse).每个单词最 多包含1000个小写字母.输入中可以有重复单词. 分析: 可以看出, 把字母看成顶点(最多26个), 然后单词就是有向边, 单词与单词之间的关系就连接起来了, 然后建立邻接矩阵, 自环的可以忽略, 记录输入的字母有哪几个, 字母的度数. 然后图中存在欧拉通路的条件有2个 (1) 连通(我用了dfs来判断) (2…
题目: Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has to solve it to open that doors. Because there is no other way to open the doors, the puzzle is very important for us. There is a large number of magne…
一些秘密的门包含一个非常有趣的单词拼图.考古学家们必须解决的问题 它打开那门.因为没有其他的方式来打开大门,这个谜是非常重要的 我们. 每扇门上都有大量的磁性板.每一个盘子上都有一个字 它.板块必须以这样一种方式排列成一个序列,每一个词都以相同的方式开始 信作为前一个字结束.例如,单词"ACM"可以通过"摩托罗拉". 你的任务是写一个计算机程序,将读的单词列表,并确定它是否 可以将所有的板按顺序排列(根据给定的规则),从而 打开门. 输入 输入由T测试用例.在输入文…
题意:将n个单词排成一个序列,保证相邻单词相邻处字母相同. 分析:每个单词看做一条有向边,字母为点,并查集看图是否连通,因为是有向图,所以最多只能有两个点入度不等于出度,且这两个点一个入度比出度大1,一个出度比入度大1 并查集,单词的首字母是尾字母的祖先. #pragma comment(linker, "/STACK:102400000, 102400000") #include<cstdio> #include<cstring> #include<cs…
传送门:   UVA - 10129 题目大意: 给定一些单词(可能会重复出现),判断单词是否能排成一个序列,前提是单词的最后一个字母与下一个单词的第一个字母相同.输出"The door cannot be opened."(不可能)或者"Ordering is possible."(可能). 单词数小于 10,000,且单个测试的有多组数据. 解题思路: 将单词看作链接首尾字母的边,建图,寻找 一条欧拉路径.(E.P.),需要判断底图(即无向图 或 由有向图看作的…
第一题: POJ 1330 Nearest Common Ancestors POJ 1330 这个题可不是以1为根节点,不看题就会一直wa呀: 加一个找根节点的措施: #include<algorithm> #include<bitset> #include<cctype> #include<cerrno> #include<clocale> #include<cmath> #include<complex> #incl…
斜率优化是单调队列优化的推广 用单调队列维护递增的斜率 参考:https://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 以例1举例说明: 转移方程为:dp[i] = min(dp[j] + (sum[i] - sum[j])^2 + C) 假设k < j < i, 如果从j转移过来比从k转移过来更优 那么 dp[j] + (sum[i] - sum[j])^2 + C < dp[k] + (sum[i] - sum[…
KMP,扩展KMP和Manacher就不写了,感觉没多大意思.   之前感觉后缀自动机简直可以解决一切,所以不怎么写后缀数组.   马拉车主要是通过对称中心解决问题,有的时候要通过回文串的边界解决问题,这个时候回文树就用到了,又好写,又强大.   之前整理过一篇后缀自动机的.感觉还要整理一下,顺便把回文树,后缀数组也整理一下 很久没写专题了,如果有空,把回文自动机也学习一下. 一:回文树 前置技能: 马拉车,KMP. 其实也没关系,就是对比一下. 马拉车是利用对称的思想,得到每个点或者空格为对称…
欧拉路和欧拉圈,简言之就是,从无向图的一个结点出发,走一条路/圈,每条边恰好经过一次,即一笔画问题 欧拉定理:一个无向图最多只有两个奇结点,那么我们就从一个奇结点出发,到另一个结点为之,一定有一条欧拉路. 无向图:最多只能有两个奇节点的图则可判定为有欧拉路 有向图:最多只能有两个结点的入度和出度不相同,必须其中一个结点的入度比出度大1(终点),另一个结点的出度比入度大1(起点),且其无向图(即底图)是连通的. 应用: 判定欧拉路/圈的有无:根据底图的连通性+结点的度数判定,其中连通性的判定可使用…