嗯…于是学一波网络流罢
之前学过一波,不过失败了orz
希望这次能学成功(x)


建模

想象一下,你在调度货车运输(不是最小生成树+LCA那道题放心吧),但是有些桥是有载重限制的。比如下图:

绿色的边表示桥,上面的数字表示载重。
老板打算从A到G。
显然,作为一个老板,超载是不合适的,姑且不论货物安全,还有可能受到法律惩罚!那么,最多能一次载多少货物呢?

在解决这个问题之前,我们先为这一模型定义一些概念。
出发点成为源点,也就是AA,显然,该点入度为00
终点称为汇点,也就是GG,显然,该点出度为00
而每条边上的最大载重称为容量,例如CDCD边的容量是6。引入符号c[i,j]c[i, j]表示从节点ii到节点jj的容量;在实际问题中,一条边不一定必须达到载重,一个载重6t的路放4t的货车运输,那么我们就称4是这条路的流量。引入符号f[i,j]f[i, j]表示节点ii到节点jj的容量。
显然,由于不可能超过限重,f[i,j]<=c[i,j]f[i, j] 恒成立。
并且,货物显然不能损失吧,所以源点和汇点的流量是相同的,对于所有点,流入的流量和流出是相同的。

建模完成,接下来就是求解了。


增广

首先,我们定义一种合理的载重方法为可行流。比如下图:

黄色的代表一个可行流,其中数字第一个表示容量,第二个为流量。
我们知道,零流就是一个典型代表——毕竟,它并不会超过容量。

然后,我们就可以开始增广操作了。其实增广是一种自然而然的想法:假定路径ss是当前的流,并且,这条路径还可以拓展,那么我们就试图去塞进去更多的流。
这样说不是很明白,举个栗子(为了方便我画图起见我们姑且换一个图)来演示一下过程好了。

好的,现在先yy一下图中存在0流。这里我们写了一个东西叫做剩余,表示的是当前这中方式下还有多少流能够汇入。
那么,增广开始。不妨采用BFS的思想,第一次找到了路径A−B−CA-B-C
我们发现,这条路线上最多能增广2单位的流,所以我们将流注入。

图中的n/mn / m表示流量/容量流量 / 容量
此时变成了这种样子。然后我们仍然BFS,发现了A−B−D−CA-B-D-C这条路径。这条路径上最多能增广一个单位的流,于是增长之。

没毛病!然后再去增广A−D−CA - D - C这条路,结果发现,可以增长三个单位的流。增长之:

扫视一遍,发现未有能增广者,结束增广。
完成了,可喜可贺。由于源点和汇点的流量相同,我们知道,最大流就是6个单位。为之四顾,为之踌躇满志。
但是,在你跃跃欲试去写网络流模板之前,不得不先泼一瓢凉水——
如果此时BFS没有去增广A−B−CA - B - C,而是先增广了A−B−D−CA - B - D - C呢?这个时候,我们再来看看情况:

(上面的CDCD应该剩余1,写错了)
继续:

惊悚的事情发生了。
没错,之后没有办法增广了,但是!此时我们求出的最大流是4!

这是否证明我们的贪心思路是错的呢?
机制的珂学家们引入了下面的概念,完美的回避掉了这个致命的漏洞——


反向弧

既然这么贪不一定是对的,那么我们就可以引入一种后悔机制,来提供反悔的机会。
怎么搞呢?我们可以每增广一次,就建立一条反向边。
仍然是上面的例子,在对A−B−C−DA - B - C - D增广之后如下图。

注意,这里的A′B′C′D′A' B' C' D'并不是虚点,而是ABCDA B C D本身,这里只是为了方便画图和观察所以分开画了。
然后呢——我们发现,A−D−B−CA - D - B - C变得可增广了,也就是,A−D,D′B′,BCA-D, D'B', BC这条。那么我们对它进行增广之后:

这个图可能稍微有些乱,红色的是我们增广的东西,绿色是增广建的反向边。
当然,继续扫一遍,发现A−D−CA - D- C还可以增广,于是最后的结果:

没有可以增广的了——完成DAZE!
所以最终的结果就是6。
那么可能有人会问了——上面我们走了A−D−B−CA - D - B - C这条原本不应该存在的路,意义是什么呢?其实,这相当我们把原本贪心走BDBD这条路的流逼了回去,转而走BCBC。

上面就是一切网络流问题的基础,也是最大流的原理。下一篇文章,我们考虑其实现办法。


参考Blog

https://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html
http://blog.csdn.net/xiaoxin_ling/article/details/19970179

网络流 (一) 最大流的原理图解相关推荐

  1. 放大器内部结构原理图解

    晶体管放大器结构原理图解 功率放大器的作用是将来自前置放大器的信号放大到足够能推动相应扬声器系统所需的功率.就其功率来说远比前置放大器简单,就其消耗的电功率来说远比前置放大器为大,因为功率放大器的本质 ...

  2. 《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程

    参考网址:http://blog.csdn.net/luanlouis/article/details/50529868 0.前言 读完本文,你将了解到: 一.为什么说Jabalpur语言是跨平台的 ...

  3. Java基础知识强化之IO流笔记42:IO流总结(图解)

    1. IO流总结(图解) 转载于:https://www.cnblogs.com/hebao0514/p/4868913.html

  4. java类索引_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...

    讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...

  5. 网络流之最大流算法(EdmondsKarp)

    网络流之最大流算法(EdmondsKarp) 标签: 网络流算法EdmondsKarp流量最大流 2014-03-11 18:05 34795人阅读 评论(12) 收藏 举报  分类: 图论~~网络流 ...

  6. java图的建立field_《Java虚拟机原理图解》1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的...

    0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述 ...

  7. java虚拟机标志_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...

    讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...

  8. java class文件常量池_《Java虚拟机原理图解》 1.2.3、Class文件中的常量池详解(下)...

    Java内存区域         1.程序计数器(Program Counter Register)(线程私有的)         2.Java虚拟机栈 (Java Virtual Machine S ...

  9. 《Java虚拟机原理图解》1.3、class文件里的訪问标志、类索引、父类索引、接口索引集合...

    讲完了class文件里的常量池,我们就相当于克服了class文件里最麻烦的模块了.如今,我们来看一下class文件里紧接着常量池后面的几个东西:訪问标志.类索引.父类索引.接口索引集合. 1. 訪问标 ...

最新文章

  1. short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确
  2. 一种注册表沙箱的思路、实现——Hook Nt函数
  3. matlab中decnbr,LMI 求解时调用decnbr()函数得到的决策变量的个数为小数是为什么
  4. ABAP 获取登陆者的IP地址和主机名
  5. 【深度学习的数学】激活函数的作用是什么?
  6. try...catch()
  7. java ee会话_Java EE会话技术Cookie和Session
  8. linux下部署Tesseract OCR及调用
  9. select不能触发change_SQL之警觉触发
  10. 老肖有话说:如期而至的Swarm新工具Crane开源解读
  11. 遭遇爆炸式匿名*** 瑞星称有人下黑手
  12. cd40系列芯片_CD40系列74系列芯片
  13. 2020年执业药师考试,5个锦囊助你做好最后冲刺!
  14. ElasticSearch健康检查localhost:9200 not reachable
  15. 【RW007系列综合实战3】柿饼派上怎样更新RW007固件和驱动?
  16. 美女画廊(点击上面的图片下面进行显示)
  17. 赛博朋克2077漫威黑寡妇捏脸
  18. 342_Linux Mint使用国内的软件源
  19. Mac宝藏软件推荐(笔者也在用)(一)
  20. 递归解决汉罗塔问题到底多么简单

热门文章

  1. python 写入文件后读取为空的问题
  2. 太平有象,AI昇腾:解锁新基建的算力密码
  3. docker安装mysql、mongodb、redis、minio等工具
  4. 《无限法则》开发经验分享:射击游戏的物理引擎应用和移动模拟
  5. freertos程序死机原因
  6. CVPR 2019 | 天秤座R-CNN:全面平衡的目标检测器
  7. JSON格式化工具和beyondcompare对比工具
  8. EmailCamel为外贸工控行业提供外贸开发信邮件群发解决方案!
  9. IP/PV/UV的定义以及三者之间的关系
  10. linux主板插硬盘识别不到,z390 m.2 接口插上sata 硬盘后,机械硬盘不识别;HDD 硬盘不识别;z390 m.2和 SATA 硬盘安装组合;,z390主板sata接口在哪...