网络流
下面是本章需要掌握的知识
• 流量⽹络的相关概念
• 最⼤流的概念
• 最⼩割集合的概念
• Dinic有效算法的步骤
• 会⼿推⼀个流量⽹络的最⼤流
下面对此依次进行复习
首先看流量网络的相关概念
上面是课程PPT中的定义,真是抽象
实际上,我们直接将某个流量网络进行建模出来就是上图这样,其中每一条弧上的第一个数字代表该条弧的最大流量,第二个数字代表该条弧的实际通过流量,并且定义一个发点V1、收点V6,其余的就是中间点了
那么上图所说的可行流又是什么?
实际上可行流即从发点到收点的流量都是合法的
- 即每一条弧的实际流量f>=0且f<=c
- 并且每个中间点的接收流量之和=发出流量之和
- 发点发出流量之和=收点接收流量之和
下面看前向弧、后向弧的概念
假设有一条链u,它链接了发点与收点,且定义链的方向是从发点到收点(注意链的方向与弧的方向无关)
那么链上的弧分为了
下面看增广链的概念
假设有一条从发点到收点的链,当该链满足如下条件时为增广链
- 如果链上的某条弧是前向弧,则必须满足0<=f<c,即是非饱和弧
- 如果链上的某条弧是后向弧,则必须满足0<f<=c,即是非零流弧
下面看割集的相关概念
割量也称为割集的容量
还是看一个例子
如上图所示,我们在流量网络上将发点和收点分开了
那么现在的割集为(v1,v2),(v1,v3)
现在的割量为5+6=11
这是一个割集与一个割量,但是我们将发点与收点分开的方式有多种,将它们都求出来,找到最小割量,就是找到最小割集了
定理:最小割量的大小就等于网络的最大流量
下面是Dinic的算法步骤
1. 从0流𝑓开始
2. 构造分层辅助网络
3. 如果𝐴𝑁 𝑓 存在s-t最短路径
① 求得𝐴𝑁 𝑓 上的极大流𝑔
② 叠加流𝑓 = 𝑓 + 𝑔;
GOTO 2
4. 否则, 𝑓为所求最大流
注意这里的分层网络是为了方便我们判断是否某条弧是否还有残余流量
并且在增广链的构建过程中则会判断是否找到的顶点的层数是当前顶点的层数+1(即还有残余流量)