欧拉回路:

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

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

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

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

判断方法:

  有向图:

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

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

  无向图:

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

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

  混合图:

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

    首先看每一条有向边$(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. junit3.8的使用

    今天开始junit使用系列,第一篇梳理junit3X系列,先贴下代码来体验下. 测试源代码如下: package test.junit38test; /** * @创建作者: LinkinPark * ...

  2. 二、Html基本语法

    1,XHTML的基本结构和规则 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < ...

  3. Python实现XML文件解析

    1. XML简介 XML(eXtensible Markup Language)指可扩展标记语言,被设计用来传输和存储数据,已经日趋成为当前许多新生技术的核心,在不同的领域都有着不同的应用.它是web ...

  4. 6 个 Linux 运维典型问题

    作为一名合格的 Linux 运维工程师,一定要有一套清晰.明确的解决故障思路,当问题出现时,才能迅速定位.解决问题,这里给出一个处理问题的一般思路: 重视报错提示信息:每个错误的出现,都是给出错误提示 ...

  5. 浅尝一个排程引擎Optaplanner,前序。

    当码农有10多年了,由建筑行业软件,各种MIS,通用物流定制平台,CCTV客户端(是闭路电视,不是央视喔)啥都做过.最后小试一下创业,不过那都是闹着玩的,不到一年就回到码农的队列,重拾搬砖的行当.近些 ...

  6. Vue.js搭建路由报错 router.map is not a function,Cannot read property ‘component’ of undefined

    错误: 解决办法: 2.0已经没有map了,使用npm install vue-router@0.7.13 命令兼容1.0版本vue 但是安装完之后会出现一个错误: Cannot read prope ...

  7. BZOJ 3790: 神奇项链 [Manacher 贪心]

    3790: 神奇项链 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 405  Solved: 200[Submit][Status][Discuss] ...

  8. bind,apply,call区别总结

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. oracle 字符串截取substr和instr

    SUBSTR(string,start_position,[length])    求子字符串,返回字符串解释:string 元字符串       start_position   开始位置(从0开始 ...

  10. Linux系统下LNMP一键搭建Linux、PHP、MySQL环境(适合新手搭建linux下的web生成环境)

    一. 首先要解释一下,什么是LNMP,LNMP起源于LAMP,LAMP是Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的缩写,这里将Web服务端的Apache替换 ...