Dinic 算法钩沉
最初是从《挑战程序设计竞赛》上了解到 Dinic 算法的。其中对于 Dinic 算法中的关键词——分层图(layered network,也称『层次图』)的引入的解释如下:
因为最短增广路(shortest augmenting path,SAP)的长度在增广过程中始终不会变短,所以无需每次都通过 BFS 来寻找 SAP。我们可以先进行一次 BFS,然后考虑由近距离顶点指向远距离顶点的边所组成的分层图,在上面进行 DFS 寻找 SAP。如果在分层图上找不到新的增广路了,则说明 SAP 的长度确实变长了,或不存在增广路了,于是重新通过 BFS 构造新的分层图。
关于
SAP 的长度在增广过程中始终不会变短
这一性质,《算法导论》上证明了一个比之更强的引理 (Lemma 26.7):
If the Edmonds-Karp algorithm is run on a flow network $G=(V,E)$ with source $s$ and sink $t$, then for all vertices $v \in V-{s,t}$, the shortest-path distance $\delta_f(s,v)$ in the residual network $G_f$ increases monotonically with each flow augmentation.
证明如下:
将增广前后的流分别记做 $f$ 和 $f'$,用 $\delta_{f}(u,v)$ 表示在剩余网络 $G_f$ 上 从 $u$ 到 $v$ 的距离。设 $v$ 是增广后与 $s$ 的距离变短了的所有顶点中距 $s$ 最近(这里『距 $s$ 最近』是指在 $G_{f'}$ 中距 $s$ 最近)的顶点,并设在 $G_{f'}$ 中 $v$ 的一个前驱为 $u$(即 $(u,v)\in E_{f'}$ 且 $\delta_{f'}(s,u) < \delta_{f'}(s,v)$ )。此时可断言 $(u,v)\notin E_f$,即 $(u,v)$ 是 $G_{f'}$ 中新出现的弧。从而增广路经过弧 $(v,u)$ 。(注意,此引理讨论的是 EK 算法。)EK 算法总是沿着 SAP 增广,所以 $\delta_{f}(s,v) < \delta_{f}(s,u)$ 。再结合 $\delta_{f'}(s,u) < delta_{f'}(s,v)$ 和 $\delta_{f'}(s,v) < \delta_{f}(s,v)$,得 $\delta_{f'}(s,u) < \delta_{f}(s,u)$ ,即增广后 $u$ 与 $s$ 的距离也变短了,又 $\delta_{f'}(s,u) < \delta_{f'}(s,v)$ ,从而与『$v$ 是增广后与 $s$ 的距离变短了的所有顶点中距 $s$ 最近的顶点』矛盾。
类似的,可以证明在 Edmonds-Karp 算法(或者说 SAP 算法)中,每次增广后,从任一顶点 $v$ 到汇点 $t$ 的距离也是不减的。
Dinic 算法钩沉的更多相关文章
- ACM/ICPC 之 Dinic算法(POJ2112)
Optimal Milking //二分枚举最大距离的最小值+Floyd找到最短路+Dinic算法 //参考图论算法书,并对BFS构建层次网络算法进行改进 //Time:157Ms Memory:65 ...
- ISAP算法对 Dinic算法的改进
ISAP算法对 Dinic算法的改进: 在刘汝佳图论的开头引言里面,就指出了,算法的本身细节优化,是比较复杂的,这些高质量的图论算法是无数优秀算法设计师的智慧结晶. 如果一时半会理解不清楚,也是正常的 ...
- [知识点]网络流之Dinic算法
// 此博文为迁移而来,写于2015年2月6日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vrg4.html ...
- 学习笔记 --- 最大流Dinic算法
为与机房各位神犇同步,学习下网络流,百度一下发现竟然那么多做法,最后在两种算法中抉择,分别是Dinic和ISAP算法,问过 CA爷后得知其实效率上无异,所以决定跟随Charge的步伐学习Dinic,所 ...
- Power Network(网络流最大流 & dinic算法 + 优化)
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 24019 Accepted: 12540 D ...
- HDU 1532 (Dinic算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 题目大意: 就是由于下大雨的时候约翰的农场就会被雨水给淹没,无奈下约翰不得不修建水沟,而且是网络 ...
- poj 1459 Power Network : 最大网络流 dinic算法实现
点击打开链接 Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 20903 Accepted: ...
- POJ 1273 Drainage Ditches(网络流dinic算法模板)
POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...
- 【BZOJ】1001: [BeiJing2006]狼抓兔子 Dinic算法求解平面图对偶图-最小割
1001: [BeiJing2006]狼抓兔子 Description 左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下 三种类型的道路 1:(x,y)<==>( ...
随机推荐
- BZOJ 3130: [Sdoi2013]费用流 网络流+二分
3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1230 Solved: ...
- IE下contentWindow对象与FF、Chrome下的区别
在ie中frame(iframe)标签通过name和id获取的对象是不同的. 通过name获取的本身就是contentWindow对象.所以 在ie中不用再找contentWindow了 例: let ...
- x86,x64,i386,i686
x64其实就是64位, x86其实就是32位. 1. i386 适用于intel和AMD所有32位的cpu.以及via采用X86架构的32的cpu. intel平台包括8086,80286,80386 ...
- java基础—基础语法1
一.标识符
- iOS开发之MVVM在项目中的应用
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- 【思维题 欧拉图】loj#10106. 单词游戏
巧妙的模型转化 题目描述 来自 ICPC CERC 1999/2000,有改动. 有 NNN 个盘子,每个盘子上写着一个仅由小写字母组成的英文单词.你需要给这些盘子安排一个合适的顺序,使得相邻两个盘子 ...
- Golang 简单 http 代理转发
程序基本实现了对http的完整转发,目前暂不支持https windows需要在设置中的网络>代理设置为手动,并开启代理服务器,填写ip和端口 // httpForward package ma ...
- 05tar命令详解
tar 命令用于对文件进行打包压缩或解压,格式为"tar [选项][文件]". 在Linux 系统中,常见的文件格式比较多,其中主要使用的是 .tar 或者 .tar.gz 或 ...
- 使用kickstart + pxe 部署无人值守安装
1.作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装. 常规的安装系统方法: 光盘安装系统:一个服务器DVD内置光驱百 ...
- MYSQL导入数据:Table XXX doesn't exist的解决
数据表为Innodb引擎 data文件夹中存在数据表的frm文件,但在phpmyadmin中看不到这些表,于是采用导入sql文件的方式进行恢复 1.直接导入原数据表的sql文件,原frm文件不删除 出 ...