网络流介绍
网络流介绍
对于现实世界的路(之前你应该已经学过最短路了弗洛伊德(@引用),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了。
所以网络流是重新分配的过程。反向边的价值在于给了重新分配提供了一种思路。