网络流基本概念和定义

网络流的基本概念

做题大致思路

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

流网络

流网络是一个有向图 \(G<V,E>\),其中有两个特殊点 \(s,t\in 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_{v\in V}f(u,v)=\sum_{v\in 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)= \begin{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>\) 使得 \(S\cap T=\varnothing,S\cup T=V\)

割的容量

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

\[C(S,T) = \sum_{u\in S}\sum_{v\in T} c(u,v) \]

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

割的流量

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

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

运算方式

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

对于点集 \(X,Y\subsetneq V\)

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

推出如下运算律:

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

\(F(X,X)=0\)

\(F(Z,X\cup Y)=F(Z,X)+F(Z,Y)\)

\(F(X\cup 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)^③\)

证明

\[\begin{aligned} ①\Rightarrow②:& 设f是图G的最大流\\ &假设残留网络G_f存在增广路|f^{\prime}|>0\\ &\because f+f^{\prime}一定为可行流 \land |f+f^{\prime}|>f\\ &\therefore 假设不成立\\ &故原命题成立\\ \end{aligned}\\ \ \\ \begin{aligned} ②\Rightarrow③:& 定义S为在G_f中从s开始沿着容量大于0的边走左右能走到的点。\\ &可以知道,由于G_f没有增广路,所以t\notin S\\ &令:T=V-S(V为整个图所有点的点集)\\ &则<S,T>是一个合法的割。\\ &任取x\in S, y\in T\\ &\because G_f没有增广路\\ &\therefore f(x,y)=c(x,y)当(x,y)\in E\\ &\quad f(y,x)=0,当(y,x)\in E\\ &\because |f|=F(S,T)=\sum_{u\in S}\sum_{v\in T}f(u,v)-\sum_{u\in S}\sum_{v\in T} f(v,u)\\ &\therefore |f|=\sum_{u\in S}\sum_{v\in T}c(u,v)=C(S,T) \end{aligned}\\ \ \\ \begin{aligned} ③\Rightarrow①:& 设f为图G的可行流,f_{max} 为图G的最大流。\\ &\therefore |f|\le |f_{max}|\\ &\because |f|=C(S,T)\\ &又\because C(S,T)\ge |f_{max}|\\ &\therefore 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,若找不到增广路,输出当前可行流。
posted @ 2021-02-02 12:05  RemilaScarlet  阅读(698)  评论(0编辑  收藏  举报