手撕Ford-Fulkerson algorithm 学一半的笔记
我明白了,
余量网络 名如其名
比如你f/c=3/5
那么正边2,reverse edge3,加起来是5
在这个你建的新图上找s到t的路径
然后path的最小边权叫delta
给流图的对应path的每条边e都加流 delta,或者 反边减delta (反边的情况)
得到新的流,重复
直到余量网络没有s到t的路径
(最大流-最小割定理也行)
求最小费用流
找个最大流,
然后
建立个新图
比如这条边的性质 容量,代价= 6,3,跑着2的流
那么正向边标4,3
反向标 2,-3
新图上找 负环(负环的代价和为负)
然后min{a_1}
流加上这个
流调整了
重复
直到新图上找不到 负环(负环的代价和为负)
不断调整f得到最大流
我吐了都,要想手撕个算法首先还得理解一些定义
我找了个课件边看边学
https://www.cs.princeton.edu/~wayne/kleinberg-tardos/pdf/07NetworkFlowI.pdf
定义大概就这些
Def. The bottleneck capacity of an augmenting path P is the minimum residual capacity of any edge in P
伪代码
其中,AUGMENT()如下
自己做slide里的quiz