Loading

「网络流浅谈」网络流的概念

通常做题思路:问题转化为流网络,再通过最大流 / 最小割 / 费用流与问题之间的数量关系,求解出原问题。

网络流于其他算法不同,概念定理需要熟记于心,否则后面做题会有很大的障碍。

1. 流网络

一个流网络记作 \(G=(V,E)\),其中 \(V\) 表示点集,\(E\) 表示边集。对于 \(\forall (u,v)\in E\),都有一个容量记作 \(c(u,v)\)。由于是一张流网络,那肯定还应该有汇点与源点,通常记作 \(s,t\)

如图,这就是一张流网络。

2. 可行流

对于每一个流网络,满足以下 \(2\) 个条件为可行流:

  1. 容量限制

    ​ 记作:\(0\le f(u,v) \le c(u,v)\),即流经每条边的流量不能超过他的限制。

  2. 流量守恒

    ​ 记作:\(\sum_{(v,x)\in E}f(v,x)=\sum_{(x,v)\in E}f(x,v)\),即除了源点与汇点之外,流入点 \(i\) 的总流量 \(=\) 流出点 \(i\) 的总流量。

可行流的流量 \(|f|\),是指从源点流出的总流量。

即:\(|f|=\sum_{(s,v)\in E}f(s,v)-\sum_{(v,s)\in E}f(v,s)\)

3. 残留网络

一般来说,残留网络记作 \(G_f=(V,E+!E)\),其中 \(V,E\) 是源网络的边集和点集,\(!E\) 表示 \(E\) 中的所有反向边。

容量:

\[c'(u,v)=\begin{cases} & c(u,v)-f(u,v) & (u,v)\in E \\ & f(u,v) & (u,v) \in !E \end{cases} \]

定理

\(f\) 为原网络的可行流\(f'\) 为残留网络的可行流

则有:\(f+f'\) 也是 \(G\) 的一个可行流且 \(|f+f'|=|f|+|f'|\)

证明:定义 \(f_{n}=f+f'\),则 \(f_n(u,v)=f(u,v)+f'(u,v)\)(注意这里只考虑正向边),为了证明也是一个可行流,无非从 \(2\) 方面:容量限制和流量守恒。

容量限制:\(f'(u,v)\le c'(u,v)=c(u,v)-f(u,v)\),所以 \(f(u,v)+f'(u,v)\le c(u,v)\)

流量守恒:因为 \(f(u,v)\) 满足流量守恒,\(f'(u,v)\) 也满足流量守恒,所以 \(f(u,v)+f'(u,v)\) 也满足流量守恒(这里只是略证,更多细节大家可以展开观察)。

4. 增广路径

在残留网络沿着容量大于 \(0\) 的边如果能够走到终点,这条路径称为增广路径。(注意:增广路径只是一条路径,而非一个网络)

5. 割

5.1 定义:

将点集 \(V\) 分成不重叠 \(S\)\(T\), 使得源点在\(S\),汇点在 \(T\)

5.2 割的容量

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

最小割: 最小的割的容量

5.3 割的流量

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

性质1: \(\forall [S,T], f(S,T)\le c(S,T)\)

证明: 由于 \(f(u,v)\) 是大于等于 \(0\) 的,所以 \(f(S,T)\le \sum_{u\in S}\sum_{v\in T} f(u,v)\),又因为有容量,所以一定 \(\le \sum_{u\in S}\sum_{v\in T} c(u,v)\) ,故 \(\forall [S,T], f(S,T)\le c(S,T)\)


性质2: \(\forall [S,T], f(S,T)= |f|\)

证明2:

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

则:\(f(X,Y)=-f(Y,X)\)\(f(X,X)=0\)\(f(Z,X\cup Y)=f(Z,X)+f(Z,Y), X\cap Y= \varnothing\)

那么有:

\[\begin{aligned} &\because S\cup T=V,S\cap T=\varnothing,\\ &\therefore f(S,V)=f(S,S)+f(S,T)\\ &\therefore f(S,T)=f(S,V)-f(S,S)=f(S,V)=f(\{s\},V)+f(S-\{s\},V)=f(\{s\},V)=|f|\\ \end{aligned} \]


那么 \(|f|=f(S,T)\le c(S,T)\)

即,\(|f|\le c(S,T)\);故,最大流 \(\le\) 最小割

7. 最大流最小割定理

(1)可行流 \(f\) 是最大流

(2)\(G_f\) 中不存在增广路

(3)\(|f|=c(S,T)\)

在三个条件中,仅需知道 \(1\) 个,就能够推出另外 \(2\) 个,证明略。

posted @ 2024-05-14 09:18  E-Syrus  阅读(43)  评论(0编辑  收藏  举报