网络流基本概念和定义

网络流的基本概念

做题大致思路

问题 ( ightarrow) 某种方式建图的网络流 ( ightarrow) 网络流解与原问题解是否等价。

流网络

流网络是一个有向图 (G<V,E>),其中有两个特殊点 (s,tin V) ,分别为源点汇点(G) 中每一条边有一个 (ge 0) 的权值,称作边的容量,边 ((u,v)) 容量可记做 (c(u,v))

源点相当于一个水源,汇点相当于一个大海,中间的边和点相当于河流水道,水从水源流出,流经河道,流向大海。容量描述的就是这些河流水道的宽度/深度/etc.。

网络流基本概念和定义

为了简化问题,我们假设若存在边 ((u,v)in E),则不存在 ((v,u)in E)

其实我们也有一种办法消除这种边,只需要将 ((v,u)) 拆成 ((v,t))((t,u)) 就可以了。

总之,在考虑问题时,不用考虑反向边

可行流

对于每一个流网络,我们可以考虑它的任意一个可行流(可简称流),流用 (f) 来表示,(f(u,v)) 表示的是单位时间内从 (u) 点到 (v) 点流经边 ((u,v)) 的流。

通俗的来说,就是河道里面流了多少水。

就是说我们要指定每一条边的流量得到一个方案 (f) ,若满足两个条件:容量限制流量守恒 ,则称这个 (f) 是一个可行流。

容量限制:流经边的流量小于等于边的容量,即:

[0 le f(u,v) le c(u,v) ]

流量守恒:除了源点汇点之外其他点不能存储流量。也就是说,流入的流量之和应该等于流出的流量之和,即:

[sum_{vin V}f(u,v)=sum_{vin V}f(v,u) ]

我们完全不用考虑反向边。

对于一个可行流 (f)(|f|) 代表这个可行流的流量值,表示流从源点流向汇点的速率。我们定义:

[|f|=sum_{(s,v)in E}f(s,v)-sum_{(v,s)in E} f(v,s) ]

就是单位时间内从源点流出的总流量减去从源点流入的总流量

最大流

最大流,也叫最大可行流,一个流 (f) 是最大流当且仅当 (|f|) 最大。

残留网络

定义一个有向图 (G<V,E,W>) 对应一个可行流 (f) 的残留网络 (G_f<V_f,E_f,W_f>) ,其 (V_f=V , E_f=E+{(u,v)|(v,u)in E}),其每条边的容量 (c^{prime}(u,v)) 与原图及对应可行流 (f) 的关系如下:

[c^{prime}(u,v)= egin{cases} c(u,v)-f(u,v) &,&(u,v)in E\ \ f(v,u) &,&(v,u)in E end{cases} ]

可以看出,对于原网络的任意一个可行流都可以建立一个残留网络。

上图示:(红色为可行流,蓝色为容量)
网络流基本概念和定义

这个网络的残留网络应为:(红色为反向边及其权值,蓝色为原图有的边及其权值)

网络流基本概念和定义

残留网络的性质

  • (f) 为图 (G) 的一个可行流,(f^{prime}) 是其残留网络的一个可行流,则 (f)+(f^{prime}) 也是图 (G) 的一个可行流。

    定义这里的流量相加的规则为:(|f+f^{prime}|=sum_{(u,v)in E}f(u,v)+f^{prime}(u,v)-f^{prime}(v,u)=|f|+|f^{prime}|)

    证明暂略。

  • 推论:若对于图 (G) 的一个可行流 (f) ,其残留网络 (G_f) 中存在一个可行流 (f^{prime}) ,其 (|f^{prime}| > 0)(f) 一定不是最大流。逆命题仍然成立。

    证明暂略。

增广路径

在残留网络里面,从源点开始沿容量大于0的边走到汇点的简单路径称为增广路径,也叫流增广路径。

增广路径一定是原网络的一个可行流。

性质

  • 对于图 (G) 的一个可行流 (f),若 (f) 的残留网络 (G_f) 中没有增广路径,则 (f) 是图 (G) 的一个最大流。

有向图 (G) 的割为点集 (V) 的一个划分方案 (<S,T>) 使得 (Scap T=varnothing,Scup T=V)

割的容量

一个割 (<S,T>) 的容量 (C(S,T))

[C(S,T) = sum_{uin S}sum_{vin T} c(u,v) ]

最小割指的一般是最小容量割。

割的流量

一个割 (<S,T>) 在可行流 (f) 下的流量 (F(S,T))

[F(S,T)=sum_{uin S}sum_{vin T}f(u,v)-sum_{uin T}sum_{vin S}f(u,v) ]

运算方式

接下来定义点集子集(不一定没有交集)之间的流量运算方式

对于点集 (X,Ysubsetneq V)

[F(X,Y)=sum_{uin X}sum_{vin Y}f(u,v)-sum_{uin Y}sum_{vin X}f(u,v) ]

推出如下运算律:

(F(X,Y)=-F(Y,X))

(F(X,X)=0)

(F(Z,Xcup Y)=F(Z,X)+F(Z,Y))

(F(Xcup Y,Z)=F(X,Z)+F(Y,Z))

性质

  1. 对于任意割 (<S,T>) ,其流量一定小于等于容量。

    定义式相加易得。

  2. 对于割 (<S,T>),其对应的可行流的值 (|f|=F(S,T))

    由流量守恒原则易得。

  3. 对于任意一个 (f) ,有 (|f|le C(S,T)) 对任意割成立。

    推论:最大流流量小于等于最小割容量

最大流最小割定理

对于一个网络 (G) ,一个流 (f) 是最大流 (^①) ,等价于 (G) 的残留网络 (G_f) 中没有增广路 (^②),等价于存在一个割 (<S,T>) 使得 (|f|=C(S,T)^③)

证明

[egin{aligned} ①Rightarrow②:& 设f是图G的最大流\ &假设残留网络G_f存在增广路|f^{prime}|>0\ &ecause f+f^{prime}一定为可行流and |f+f^{prime}|>f\ & herefore 假设不成立\ &故原命题成立\ end{aligned}\ \ egin{aligned} ②Rightarrow③:& 定义S为在G_f中从s开始沿着容量大于0的边走左右能走到的点。\ &可以知道,由于G_f没有增广路,所以t otin S\ &令:T=V-S(V为整个图所有点的点集)\ &则<S,T>是一个合法的割。\ &任取xin S, yin T\ &ecause G_f没有增广路\ & herefore f(x,y)=c(x,y)当(x,y)in E\ &quad f(y,x)=0,当(y,x)in E\ &ecause |f|=F(S,T)=sum_{uin S}sum_{vin T}f(u,v)-sum_{uin S}sum_{vin T} f(v,u)\ & herefore |f|=sum_{uin S}sum_{vin T}c(u,v)=C(S,T) end{aligned}\ \ egin{aligned} ③Rightarrow①:& 设f为图G的可行流,f_{max} 为图G的最大流。\ & herefore |f|le |f_{max}|\ &ecause |f|=C(S,T)\ &又ecause C(S,T)ge |f_{max}|\ & herefore f=f_{max}\ \ end{aligned}\ 综上,①Leftrightarrow ②Leftrightarrow ③,Q.A.D ]

FF方法

基于最大流最小割定理,我们可以得到如下方法求解最大流。

  1. 输入一个网络 (G)
  2. 确定一个可行流 (f),为当前可行流
  3. 在其残留网络(G_f)中寻找增广路径 (f^{prime})
  4. 更新当前可行流为 (f+f^{prime})
  5. 转3,若找不到增广路,输出当前可行流。