欧拉回路:

  欧拉回路,俗称一笔画,比如一笔画五角星等。

  这里给出非严谨的定义:欧拉回路即从一个点出发,不重复、不遗漏地经过所有的边与所有的点,并恰好回到出发点。

  包含欧拉回路的图称为欧拉图。

  欧拉回路在有向图、无向图和混合图(存在有向边和无向边)上有不同的求法,不过原理上是类似的。

判断方法:

  有向图:

    研究欧拉回路的性质我们发现:在有向图的欧拉回路中,每一个点,一定是若干次一进一出,否则无解。

    因此要求每一个点的入度=出度。

  无向图:

    类似有向图,在无向图的欧拉回路中,每一个点也是若干次一进一出。

    因此要求每一个点的度数为偶数。

  混合图:

    这下就不好考虑了,我们需要使用网络流建模。我们想办法从出度和入度入手。

    首先看每一条有向边$(u,v)$,它们一定会为$u$提供1的出度,为$v$提供$1$的入度。

    其次看每一条无向边$(u,v)$,由于其无向,我们暂且随便定一个方向(干脆就$u$->$v$好了),为$u$提供1的出度,为$v$提供1的入度。

    现在每个点的出度和入度看起来是乱七八糟的了。我们期望的,是一个点的出度与入度平衡。

    由于有向边已经固定,没法改变它们对出入度的贡献,那么现在要做的,是将某一些无向边反向,使得所有点的出入度平衡。

    一条边一反向,就会将某一度$-1$,将另一度$+1$。由此如果一个点出入度之差为奇数,那么一定不可能通过无向边的调整使它平衡,此时一定无解。

    设一个点$u$的出度为$out$,入度为$in$。

     如果$out>in$,那么从这个点出发的边太多。它提供$x=\frac{1}{2}(out-in)$条出边可以反向。这样会给每一条出边的终点的$out+1$,$in-1$。那么由源点$S$向$u$连一条容量为$x$的边。

     如果$in>out$,那么到达这个点的边太多。它提供$x=\frac{1}{2}(in-out)$条边可以反向。这样会给每一条入边的起点的$out-1$,$in+1$。那么由$u$向汇点$T$连一条容量为$x$的边。

    基于上述关系,$out>in$的点集可以给$in>out$的点集提供边,使得双方都尽可能平衡,即多的给少的。

    那么对于原图中每一条无向边$(u,v)$,刚刚定的方向是$u$->$v$才得出当前的度数,那么由$u$向$v$连一条容量为$1$的边就好。

    跑最大流,看由$S$出发的边是否全部满流:如果是,则存在欧拉回路;否则不存在欧拉回路。因为这些边满流,代表$out>in$的点已经平衡,可以发现$in>out$的边也恰好平衡了。

    如何输出欧拉回路?根据上述建模方法,如果存在欧拉回路,对于中间的点互连的容量为$1$的边,如果流量为0该无向边就这么定向,如果流量为1,所对应的无向边应该要反向。有向边直接输出即可。

  

  

【Learning】 欧拉回路的求解的更多相关文章

  1. POJ 1637 - Sightseeing tour - [最大流解决混合图欧拉回路]

    嗯,这是我上一篇文章说的那本宝典的第二题,我只想说,真TM是本宝典……做的我又痛苦又激动……(我感觉ACM的日常尽在这张表情中了) 题目链接:http://poj.org/problem?id=163 ...

  2. BZOJ2095 POI2010 Bridges 【二分+混合图欧拉回路】

    BZOJ2095 POI2010 Bridges Description YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛 ...

  3. 「LuoguP1341」 无序字母对(欧拉回路

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...

  4. Codeforces 429E - Points and Segments(欧拉回路)

    Codeforces 题面传送门 & 洛谷题面传送门 果然我不具备融会贯通的能力/ll 看到这样的设问我们可以很自然地联想到这道题,具体来说我们可以通过某种方式建出一张图,然后根据" ...

  5. SGU刷题之路开启

    VJ小组:SGU---48h/题 每道做出的题目写成题解,将传送门更新在这里. SGU:101 - 200 SGU - 107 水题 解题报告 SGU - 105 找规律水题 解题报告 SGU - 1 ...

  6. ACM/ICPC 之 DFS求解欧拉回路+打表(POJ1392)

    本题可以通过全部n位二进制数作点,而后可按照某点A的末位数与某点B的首位数相等来建立A->B有向边,以此构图,改有向图则是一个有向欧拉回路,以下我利用DFS暴力求解该欧拉回路得到的字典序最小的路 ...

  7. 机器学习---用python实现最小二乘线性回归算法并用随机梯度下降法求解 (Machine Learning Least Squares Linear Regression Application SGD)

    在<机器学习---线性回归(Machine Learning Linear Regression)>一文中,我们主要介绍了最小二乘线性回归算法以及简单地介绍了梯度下降法.现在,让我们来实践 ...

  8. Machine Learning系列--隐马尔可夫模型的三大问题及求解方法

    本文主要介绍隐马尔可夫模型以及该模型中的三大问题的解决方法. 隐马尔可夫模型的是处理序列问题的统计学模型,描述的过程为:由隐马尔科夫链随机生成不可观测的状态随机序列,然后各个状态分别生成一个观测,从而 ...

  9. 算法笔记_148:有向图欧拉回路求解(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 Description A catenym is a pair of words separated by a period such that t ...

随机推荐

  1. 有史以来功能最全,使用最简单的excel导入/导出工具

    Github地址:https://github.com/xuanbg/Utility. 还有其他一些福利,请各位园友自取. 构造方法 1.用于导出Excel文件 NpoiHelper(ExcelVer ...

  2. CentOS 7 修改SSH端口号 和 ssh无法使用密码登录 和 查看pid 端口占用

    如下示例把SSH默认端口22改为122. 1 修改/etc/ssh/sshd_config文件 #Port #找到改行,如果还想继续使用该端口,可以把#去掉,如果使用新端口,可以默认不管 Port # ...

  3. Ipython的安装/ipython notebook的简单使用

    安装了pyhton的windows版的shell好久了,今天才听说Ipython这个东西,确实在windows下的python shell很难用,一旦输入错误就要重新来过 了解了下ipython,然后 ...

  4. Node-debug方法

    本文使用配置node-inspector配合chorme完成debug(编辑器使用SublimeText3). 1.用命令行进入安装node的目录,使用npm install -g node-insp ...

  5. Oracle-Linux安装配置python3.6环境

    最近公司更换了linux系统的版本,从Ubuntu改为了oracle linux,相关的Python环境也要重新配置,记录一下基本配置的过程. 相关环境 系统:oracle linux7.3 系统自带 ...

  6. mongodb- Java API 查询操作

    package com.x.mongodb; import java.net.UnknownHostException;import java.util.Collection;import java. ...

  7. Cypher查询语言--Neo4j-WHERE(三)

    目录 Where Boolean 操作类型 节点属性上的过滤 正则表达式 转义正则表达式 不分大小些正则表达式 关系类型上的过滤 属性存在性 如果缺失属性默认为true 如果缺失属性默认为false ...

  8. 安装memcache及php的memcached模块

    下载链接: http://pan.baidu.com/s/1o6MA8lG http://pan.baidu.com/s/1qWO8tMs http://pan.baidu.com/s/1c0iZu1 ...

  9. Spring基础篇——bean的自动化装配

    上篇博文讲Spring的IOC容器时说道,虽然容器功能强大,但容器本身只是个空壳,需要我们主动放入装配对象,并告诉它对象之间的协作关系,然后容器才能按照我们的指示发挥它的魔力,完成装配bean的使命. ...

  10. UOJ#219. 【NOI2016】优秀的拆分 [后缀数组 ST表]

    #219. [NOI2016]优秀的拆分 题意:求有多少AABB样子的子串,拆分不同的同一个子串算多个 一开始一直想直接求,并不方便 然后看了一眼Claris的题解的第一行就有思路了 如果分开,求\( ...