【坚持不能偷懒】
(概念简单说明,具体还请自行百度……)
网络流:
常见问题:最大流
一个图,有向图,边上有容量上限,许多点,起点S,终点E
从S到E,最多流量是多少
核心思想:
【增广路】【剩余图】【反向边】
朴素地说
我找完一条路了,把流量去掉
则加入【反向边】重新做图
做出的图就是【剩余图】
如果我还能找到一条流量不为0的路径
即是一条【增广路】
这条【增广路】的加入,使得流量更多
当无法找到【增广路】时,则为最优
什么是【反向边】
就是譬如我一条边是 A -> B
它能容纳 10 的流量
我已经在当前情况下,占用了8的流量
那么,我的某种更好的情况,或许需要让8变成76543210 或者 910
变成9 10比较容易,就是在剩余图中 A->B 10 改成 A->B 2
而如何【反悔】呢? 就是 B->A 原本没有(0) 改成 B->A 8
譬如
A -> B 10] B -> C 5] B -> D 5] C -> P 10] D -> P 10
那么我第一步,搜到一条 A,B,C,P 的 5 的流量
则图被更改为
A -> B 5]
B -> C 0]
B -> D 5] C -> P 5]
D -> P 10
同时更新反向边
B -> A 5] C -> B 5] P -> C 5]
那么,解题过程就是
while 找到增广路 == true
更新图()
这个复杂度是多少呢(点为V,边为E)
每次找增广路,实际上是要搜尽的,也就是每条边来一次,E
网上说:“可以证明” 增广路的搜索次数不会超过 V * E
所以复杂度就是 O(V E^2) 还是很炸的 完全图最坏就是 V^5了
于是我们就要优化……
——瞎扯时间——
这个最多增广次数 V E 是咋个来的呢……
现在开始瞎扯,看能不能扯出来
思路一:
每次找到增广路,都会使得流量变大
如果一开始最小 是 某个 E(min)
最后最大的流量 是 ∑E(某些)
我的流量更新梯度是 E(min) 点点点 到 E(一坨)
这个上限是我源点S 和 汇点T 周围的流量和的最小值
就算都连上 也就是 V 个 单边的流量
好吧,扯不出来
思路二:
——瞎扯失败——
这个Blog上有对网络流的很专业很全面的讲解,感觉自己写的真是好low……
http://blog.youkuaiyun.com/fengchaokobe/article/details/7584781