欧拉回路:

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

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

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

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

判断方法:

  有向图:

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

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

  无向图:

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

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

  混合图:

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

    首先看每一条有向边$(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. cursor的moveToNext()与moveToFirst()

    String sql = "select count(*) as c from sqlite_master where type ='table' and name ='" + t ...

  2. 在nagios中使用nrpe自定义脚本

    nrpe的安装    tar xvfz nrpe-2.13.tar.gz cd nrpe-2.13 ./configure make all make install-plugin make inst ...

  3. 【转】sed 学习笔记

    一  .  sed 简介 1  .  功能 sed 是一种流编辑器,所谓流编辑器是指能够对来自文件或者管道的输入流进行基本的文本转换的工具,比方说查找替换删除等. 2  .  最简单的运作机制 sed ...

  4. JavaSE基础篇—流程控制语句—方法的定义 调用和重载

    1.定义方法 是封装在一起来执行操作语句的集合,用来完成某个功能操作,简单的说就是提取出来的有特定功能的代码(程序).在某些语言中被称为函数或者过程,比较特殊的方法是main方法(主方法),main方 ...

  5. TCP连接之未连接队列的理解[转]

    tcp服务器在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认 ...

  6. ansible 批量安装zabbix agentd客户端

    目录结构 # tree /etc/ansible/ /etc/ansible/ ├── ansible.cfg ├── hosts ├── roles │   └── zabbix-agentd │  ...

  7. CSS选择器之通配符选择器和多元素选择器

    1.通配符选择器 如果希望所有的元素都符合某一种样式,可以使用通配符选择器. 基本语法: *{margin:0; padding:0} 可以让所有的html元素的外边距和内边距都默认为0. 写一段ht ...

  8. 分离Webpack开发环境与生产环境的配置

    这是Webpack+React系列配置过程记录的第五篇.其他内容请参考: 第一篇:使用webpack.babel.react.antdesign配置单页面应用开发环境 第二篇:使用react-rout ...

  9. Windows实用命令

     Windows实用命令   # 统计ESTABLISHED状态下的连接一共有多少个/c是统计行数,/i是忽略大小写 netstat -ano|find /i "established&qu ...

  10. ES6与canvas实现鼠标小球跟随效果

    最近闲来无聊,看了下ES6的语法,结合canvas实现了动画特效--随着鼠标的移动,会有小球跟随且自动消失的动画. 首先,html部分,目前就一个canvas标签. <canvas id=&qu ...