最大流笔记

参考博文地址https://www.cnblogs.com/Bn_ff/p/12398026.html

本文是小白学习记录之用

流量:一条边当前承受的水量,每条边/弧都会有一个流量,表示为函数 f(u,v);流量可为 0,可为负

容量:一条边可以承受的最大水量,每条边/弧都会有一个容量,表示为函数 c(u,v)

残留容量:一条边还可以新增加的水量,即为 容量 - 流量

最大流笔记
流动前:
最大流笔记
1是容量,0是流量,圈1是起点,圈4是终点,其他数字圈为各节点

增广路:在残量网络中的一条从 S 到 T 的合法路径,即所有弧的残量为正,如:圈1——>圈2——>圈4

流动后
流量由0——>1
但圈2——>圈3流量未变 ?
如果流量经过此边会出错
下面会解释
最大流笔记
残余流量:容量-流量
最大流笔记
残余容量为0,则这条边不能再次使用

不管怎么流,最后到终点的流量为2

增广路:在残量网络中的一条从 S 到 T 的合法路径,即所有弧的残量为正,如:圈1——>圈2——>圈4

增广路犯错:
比如下面这张图,第一次找增广路时我们找到了蓝色的这条(1−>2−>3−>4)
最大流笔记
(红色标记为各边残留流量)
那么我们会发现:1−>2−>3−>4这条增广路的各边不能再次使用,最后得到的流量为1,不是我们要求的最大流。

怎么办?建立反边

最大流笔记
反边即为新建立的路径,给予流出去的流量的一部分反悔的机会

引用大大佬的话:
将之前流出去的流量的一部分(或者全部)反悔掉了个头,跟随着新的路径流向了其它地方,而新的路径上在到达这条边之前所积蓄的流量 以及 之前掉头掉剩下的流量 则顺着之前的路径流了下去。

思想结束:

算法分为EK算法和dinic算法,猹猹我不会,难过。。。