网络流介绍

网络流介绍

对于现实世界的路(之前你应该已经学过最短路了弗洛伊德(@引用),SPFA,迪杰斯特拉)

网络流求的和最短路不太一样(但有些相似),容我慢慢道来。


假使从工厂到销售商的路都是单向的并且每天某条路最多走n俩车(感谢交通拥堵为我们提供了新的题目类型)

然后每天销售量都是无穷大的(这是啥东西??告诉我我去卖),想知道最多能运出去多少就生产多少(每天)。

一般问题:求生产量


先声明,网络流解决的是从源点到汇点的运输问题,所以,和单源最短路很想(B/DFS,上述最短路算法都可能用到)

网络流的图都是单向图!!!但是会有两个方向的边


网络流是一种图结构的算法,所以先来经典图镇楼


红线代表运输可行路线,蓝线表示逆流弧


红边上的数字代表这条边的运载量

想想怎么走可以走最多

现在,假设

①S-》1-》2-》E这条路走了五车(s-》1)

②S-》2-》E走了5车(2-》E走完了)

现在还剩(s-》2)下一车,咋办呢

我们把车们刚刚走过的边加上的反向边(蓝)加上个权重让这个图调整流动方式


现在从2-》1-》E最多走三车了(min(5,3)=3),所以可以走S-》2-》1-》E过一车

不过,这是单向图啊,凭什么双向走呢

现在给出这种走法的说明

反向边走一车相当于原来正向边少走一车,正向少走了的那一车就要回去走1-》E这条边,发现可以走,就走了

1-》2少走了一车,意味着2-》E也少走一车

这样s-》2的第六车就可以走2-》E了。

所以网络流是重新分配的过程。反向边的价值在于给了重新分配提供了一种思路。