网络流之EK 算法
来源:互联网 发布:js appendchild 编辑:程序博客网 时间:2024/04/29 04:02
白书中写道:
“算法基于这样的一个事实:
残量网络中任何一条从s到t的有向道路都对应一条原图中的增广路——只要求出该道路中所有残量的最小值d,把对应的所有边上的流量增加d即可,这个过程称为增广。不难验证,如果增广前的流量满足3个条件,增广后仍然满足。
只要在残量网络中存在增广路,流量就可以增大;如果残量网络中不存在增广路,则当前流就是最大流。”
3个条件: 1.容量限制(别超过容量) 2.斜对称性(添加时,减少正向,增加反向) 3.流量平衡(入等于出)
网络流EK算法
数据结构:队列
主要操作:广搜 记录路径 更新
能解决的问题:最大流(最小割)
复杂度:O(MV)v指最大容量,M指边数。
新名词:
1.增广路:从源点s到汇点n的一条简单路,如果路上的每条边(u,v)的可改进量均大于0,则称这条路为一条增广路。
增广路定理:网络达到最大流量当且仅当不存在增广路。
增广路算法:从一个可行流开始不断的寻找可增广路,然后沿着它增广,直到它不存在。
2.反向弧:如果有一条弧(u,v),那么再进行网络流算法时,要对它建立反向弧(v,u),反向弧的容量为0,与正向弧相反,正向弧减少容量时,反向弧增加容量。
建立反向弧能更多的增广,使网络流算法正确。为的是给程序一个“后悔”的机会,BFS寻找增广路的时候更加准确。
3.可行弧:在EK算法中指可从u到v增加流量(也就是容量不为0)。
4.可行路:从源点s到n的有可行弧构成的路径叫做可行路。
具体操作:
1.建立网络(正向弧+反向弧)
2.从源点出发,广搜一条最短可行路(即最先到达汇点tink的那条路),每次到达一个点用pre数组记录是由那条边过来的(为后面减小流量做准备)
3.到达汇点tink时,按照pre数组记录的,从可行路中找一条容量最小的进行容量减少。即找到了一条割边。
4.重复操作2.3,直到无法到达汇点,算法结束,即找到了最大流,算法结束
模板题目:
HDU3549
解题报告:
http://blog.csdn.net/u013476556/article/details/38664795
0 0
- 网络流之EK 算法
- 网络流EK算法
- 网络流EK算法
- 网络流EK算法
- 网络流EK算法
- 网络流EK算法
- 网络流--EK算法
- 网络流EK算法理解
- 网络流EK算法详解
- 最大网络流 EK 算法
- 网络最大流 EK算法
- 网络流之最大流算法模板EK
- 最大流之EK算法
- EK算法(网络流,最大流)
- 网络流--求最大流:EK算法
- POJ 1459 网络流算法(EK)
- poj1698-网络流,(Ek)和(Dinic)算法。
- 网络流的EK算法模板
- CentOS 安装 openoffice 和swftools 编译安装
- JProfiler 8(一个很好的java性能监控工具) 下载和注册码
- virtualbox安装ubuntu的坑
- bnu 12639 Cards (dp求期望)
- 1408181917-hd-A+B for Input-Output Practice (VIII).cpp
- 网络流之EK 算法
- linux emacs minibuffer
- android开发使用 ndk-stack 打印崩溃日志
- missing required architecture i386 解决方法
- android 命令行创建程序 Linux
- 字符串处理问题系列之 To and Fro hdoj 1200
- 沙盒路径
- Linux中环境变量文件及配置
- 用matlab代码开启笔记本摄像头的6种方法——图像效果各不相同,纯自我总结,与大家分享