网络流拓展

本文最后更新于:星期四, 二月 3日 2022, 9:15 晚上

网络流

定义

给定一个有向图G=(V,E)G=(V, E),其中每条边(u,v)(u, v)都有一个非负的容量值,记做c(u,v)0c(u, v)\geq 0,同时图中存在两个特殊点源点SS, 汇点TT。其中从源点SS到汇点TT的最大可行流量,这个问题也被称为最大流问题

性质

  • 容量限制:对于任意的$ < u, v > \in V,f(u,v)\leq c(u,v)$
  • 反对称性:对于任意的$ < u,v > \in V,f(u,v)=-f(v,u)$
  • 流量守恒:对于任意的uu,若uu不为SS且不为TT,那么f(u,v)=0\sum f(u,v)=0,即uu到相邻节点的流量和为00,因为流入uu的流量和uu流出的流量相等,节点uu本身不会产生和消耗流量。

解决思路

寻找增广路,不断更新残余网络,直到找不到任何增广路

最大流最小割定理

前言

对于一个网络流G=(V,E)G=(V,E),其割的定义是一种点的划分方式,将所有点划分为SST=VST=V-S两部分,其中源点sSs\in S,汇点tTt \in T。对于一个割(S,T)(S,T),定义净流f(S,T)f(S,T)表示穿过割S,TS,T的流量和。

f(S,t)=f(u,v)uS,vTf(S,t)=\sum f(u,v) | u\in S, v \in T

其中任意一个割的净流f(S,T)f(S,T)总是和网络流的流量ff相等

解释

根据网络流的定义,只有源点ss会产生流量,汇点tt会接收流量。因此对于任意非sstt的点uu,净流量一定是00,也就是f(u,v)=0\sum f(u,v)=0。而源点ss的流量最终都会经过割(S,T)(S,T)的边到达汇点tt,所以网络流的流ff等于割的净流f(S,T)f(S,T)

定义

在所有可能的割中,存在一个容量最小的割,我们称其为最小割

对于任意网络流图而言,其最大流一定小于等于最小割

定理

对于一个网络流图G=(V,E)G=(V,E),其中有源点ss和汇点tt,我们可以推出一个最大流最小割定理

  • ff是图GG的最大流
  • 残留网络GfGf不存在增广路
  • 对于GG的某一个割(S,T)(S,T),此时f=C(S,T)f=C(S,T)

证明

121 \Rightarrow 2

利用反证法,假设ffGG的最大流,但是残留网络中存在增广路pp,流量为fpfp,那么我们又f=f+fp>ff'=f+fp>f。和11矛盾

232 \Rightarrow 3

假设参与网络GfGf不存在增广路,所以在参与网络GfGf中不存在路径从ss到达tt。我们定义SS集合为:当前残留网络汇中ss能够到达的点。同时定义T=VST = V - S

此时(S,T)(S,T)构成一个割S,TS,T。且对于任意的uS,vTu \in S, v \in Tf(u,v)=c(u,v)f(u,v)=c(u,v)。若f(u,v)<c(u,v)f(u,v)<c(u,v)则由Gf(u,v)>0Gf(u,v)>0ss可以到达vv,与vv属于TT矛盾

313 \Rightarrow 1

由于ff的上界是最小割,当ff到达割的容量的时候,显然达到了最大值,因此ff是最大流

拓展

二分图多重匹配

1

SS连向AA,流量为AA中点可以连接的数量,AA连向BB表示可以匹配,BB连向TT,流量为可以连接的数量

最小路径覆盖

定义

给定一个有向无环图,用最少的路径数量去保证所有点都被覆盖住

2

对于每条路径,起点入度都为00,终点的出度都为00,中间节点的出入读都为00

每个点最多有一个前驱,同时最多有一个后继节点

做法

3

将每个点uu拆成u,uu,u',其中SS连向每个uu,每个uu'连向TT,对于每条边(u,v)(u,v),建立边uvu\rightarrow v',跑网络流,最终答案为点数-最大流

最大权闭合子图

定义

给定一有向图,从中选择一些点组成点集VV。对于每个VV中的节点,其后续节点仍然需要在VV中。最权值最大的子图

做法

4

首先建立源点ss和汇点tt,将源点ss和所有权值为正的点相连,流量为权值,将所有权值为负的点和汇点tt相连,流量为权值的绝对值,权值为00的点不做选择,同时将原来的边的流量设置为无穷大,答案为所有正权值和-最小割

引理

  • 最小割一定是简单割
    • 简单割指得是:割(S,T)(S,T)中每一条割边都与ss或者tt关联,这样的割叫做简单割。
  • 简单割一定和一个闭合子图对应
    • 闭合子图VV和源点ss构成SS集,其余点和汇点tt构成TT

证明

  • 闭合子图是简单割

  • 若闭合子图对应的割(S,T)(S,T)不是简单割,则存在一条边(u,v)(u,v)uSu\in SvTv \in T,且c(u,v)=c(u,v)=\infty。说明u的后续节点vv不在SS中,产生矛盾

  • 简单割是闭合子图

  • 对于VV中任意一个点uuuSu\in Suu的任意一条出边c(u,v)=c(u,v)=\infty,不会在简单割的割边集中,因此vv不属于TTvSv\in S。所以VV的所有点均在SS中,因此SsS-s是闭合子图

  • 最小割就是最大权的闭合子图

  • 割的容量C(S,T)=TC(S,T)=T中所有正权点的点权之和等于+S+S中所有负权点的权值绝对值之和

  • 闭合子图的权值W=SW=S中所有正权点的权值之和S-S中所有负权点的权值绝对值之和

  • C(S,T)+W=TC(S,T)+W=T中所有正权点的权值之和+S+S中所有正权点的权值之和==所有正权点的权值之和

  • 所以W=W=所有正权点的权值之和C(S,T)-C(S,T)


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!