图论——欧拉路
oula
lllllan.
盛意以江河,江河不及你
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
欧拉路
欧拉路和欧拉回路的概念 欧拉路: 从图中某个点出发遍历整个图,图中的每条边通过且只通过一次。 欧拉回路: 起点和终点相同的欧拉路。 度数: 一个点上连接的边的数量称为这个点的度数。在无向图中,如果度数是奇数则这个点称为奇点,否则则称为偶点。在有向图中有出度和入度。欧拉路和欧拉回路是否存在首先图应该是连通图。而图的连通性用DFS或并查集来判断无向连通图的判断条件:存在欧拉回路: 图中的点全都是偶点。存在欧拉路: 图中只有两个奇点,其中一个奇点是起点,另一个是终点。不可能原创 2020-08-23 19:31:23 · 466 阅读 · 0 评论
-
2020 ECNU Campus Online Invitational Contest E. Even Degree【欧拉回路<DFS输出路径+构造>】
E. Even Degree题意: 给定一个无向图,题目保证没有重边,也没有孤立点,并且每一个节点都有偶数条边。要求每次只能从偶点上删除一条边。求最多可以删除多少条边,并按照删除顺序输出每条删除边的编号。题解: 犹豫题目保证的所有点都是偶点,所以纸上随便找几个图画一下就知道肯定可以将一个连通图删剩下一条边。然后问题就来到了删边的顺序。回顾一下最普通的输出欧拉回路的代码:关键在于先递归,后输出。这个代码的正确性我就不加证明了,不理解的可以自己百度。void euler (int u) ...原创 2020-11-25 21:40:16 · 357 阅读 · 0 评论 -
HDU2894 DeBruijin——欧拉回路(非递归DFS+构造)
点这里题意: 中文题面,相信你看到的,不再赘述。题解: 今天做到的欧拉回路构造第三次了,可参考POJ1780 Code——欧拉回路(非递归DFS)。过程中犯的错:mod: 每次循环pre都要更新,而pre的更新运算又与mod相关,mod的大小应为2k-2。pre: pre的更新一直弄错,pre = (pre % mod) * 2 + deg[pre] - 1;这个不解释可能过几天我自己也忘记了。意为剪去pre的第一位数字(即pre % mod)之后加上末尾新的数字,十位数肯定是处理不了的,原创 2020-08-24 21:39:31 · 254 阅读 · 0 评论 -
HDU4850 Wow! Such String!——欧拉回路(非递归DFS+构造+字符串)
点这里题意: 给定一个n,要求输出一个长度为n的字符串,并且不会有长度大于等于4的重复的子串,不能得到输出impossible。题解: 这题就跟POJ1780 Code——欧拉回路(非递归DFS)很像。无非这里变成了字符串处理起来烦一点点 ,也就亿点点。构造。 当然了,能重复的子串长度不能超过3,已经可以写一个很长很长的字符串了,当然是先构造好一个条件允许下最长的字符串,然后输出要求长度就行了。点。 既然是欧拉回路的问题,点是什么,是构造到当前位置时,前三位字母构成的字符串。边。 所有的点,后原创 2020-08-24 19:33:29 · 212 阅读 · 0 评论 -
HDU5883 The Best Path——欧拉路(异或)
点这里题意: T组数据,n个湖(即点),m条河(即边),并且每个点都有一个权值。如果这个图能构成欧拉路(包括回路),求从起点异或到终点的值中的最大值。题解:连通性。 由于题目性质,这道题中的点都是相互连通的,不需要另外判断。欧拉路(回路)。 判断所有点的度数即可:欧拉回路——所有点都是偶点,欧拉路——只有两个奇点,其他全为偶点。异或结果。 实际上没到一个点都要求一遍异或,那为什么可以求最大值呢?而且欧拉回路中虽然边不重复,但是点会重复,那么我们一个点需要求几次异或呢?(deg[i] + 1原创 2020-08-24 16:52:17 · 228 阅读 · 1 评论 -
HDU1116 Play on Words——欧拉路(有向图+并查集)
点这里题意: T组输入,每组输入有n个单词,要求将所有单词两两首尾相连,要求是前一个单词的最后一个字母和后一个单词的最后一个字母必须相同。如果能将所有单词连成一串,输出Ordering is possible.否则输出The door cannot be opened.题解: 看完题目就能知道是一个欧拉路的问题。而欧拉路的判断条件有:连通性。 用并查集判断即可。欧拉路。 只有两个点的入度和出度差为1和-1,其他所有点的入度和出度必须相等。欧拉回路。 所有点的入度和出度均相等。显然欧拉回路也符合原创 2020-08-24 13:10:15 · 363 阅读 · 0 评论 -
HDU1878欧拉回路——欧拉回路(并查集)
点这里题意: 中文题面,直说求欧拉回路,再也不能说英文题看不懂了题解:连通性: 并查集。 连通的点用并查集合并,最后判断如果连通区块大于1,则图是不连通的。欧拉回路: 在连通的基础上,判断是否所有点都是偶点即可。#include<bits/stdc++.h>using namespace std;const int N = 1e3 + 10;int n, m, a, b;int s[N], deg[N], G[N][N];int find(int x){ re原创 2020-08-24 10:31:21 · 219 阅读 · 0 评论 -
POJ1780 Code——欧拉回路(非递归DFS)
点这里题意: 有个保险箱子是n位数字编码,当正确输入最后一位编码后就会打开(即输入任意多的数字只有最后n位数字有效)……要选择一个好的数字序列,最多只需按键10n + n - 1次就可以打开保险箱子,即要找到一个数字序列包含所有的n位数一次且仅一次。题解:为什么是按键10n + n - 1次。 不管你按键多少次,判断密码是否正确都是判断你按键的最后n位数,也就是说我们不需要真的按 n * 10n 个数字,只要一长串的数字当中出现过密码就行。欧拉回路。 冥冥之中就有感觉是一道欧拉回路的问题,但为什原创 2020-08-23 23:22:51 · 284 阅读 · 0 评论 -
UVA10054 The Necklace——欧拉回路(DFS)
点这里题意: 有n个珠子。每个珠子有两种颜色,分布在珠子的两边。一共有50种不同的颜色。把这些珠子串起来,要求两个相邻的珠子接触的部分颜色相同。问是否能连成一个珠串项链?如果能,打印出一种连法。题解: 一开始看样例其实我有点懵 ,每行给出某个珠子的两个颜色,然后相同颜色的能相连。其实我们换个角度,把行输入看成是一条边(原本代表一个珠子的两个颜色),把每种颜色看成一个点。那么我们的任务就简单明了了,把所有的颜色连起来,每条边通过且只通过一次——欧拉回路。连通。 一般情况下是需要用DFS、并查集等方法原创 2020-08-23 19:09:37 · 343 阅读 · 0 评论
分享