最大流学习笔记

Posted Only the Strong Survive

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大流学习笔记相关的知识,希望对你有一定的参考价值。

1 流网络。流网络G=(V,E)是一个有向图,每条边$(u,v)\in E$有一个非负容量值$c(u,v)\geq 0$.如果$(u,v)\notin E,c(u,v)=0$.另外有一个源节点s和汇点t。

2 流。G中的流是一个实值函数$f:V\times V\rightarrow R$,满足:

(1)容量限制:对所有的$u,v\in V$,$0 \leq f(u,v)\leq c(u,v)$

(2)流量守恒:对所有的$u\in V-\{s,t\}$,满足$\sum_{v\in V}f(v,u)=\sum_{v\in V}f(u,v)$

一个流$f$的值$|f|$的定义为:$|f|=\sum_{v\in V}f(s,v)-\sum_{v\in V}f(v,s)$。一般来说,一个流网络不会有任何进入源点的边,因此一般$\sum_{v\in V}f(v,s)=0$。

最大流要解决的问题是给定流网络G以及s、t,希望找到值最大的一个流$f$。

3 残存网络。给定流网络G以及它的一个流$|f|$,残存网络$G_{f}$的顶点集边集以及源点汇点都与原流网络相同,$G_{f}$的边集的容量定义为:

$c_{f}(u,v)=\left\{\begin{matrix}c(u,v)-f(u,v) &(u,v)\in E\\ f(v,u) & (v,u)\in E\\  0 & other \end{matrix}\right.$

4 若求得残存网络$G_{f}$的一个流$f^{‘}$,那么$f+f^{‘}$为$f^{‘}$对$f$的递增,

 $(f+f^{‘})(u,v)=\left\{\begin{matrix}f(u,v)+f^{‘}(u,v)-f^{‘}(v,u) & (u,v)\in E\\  0& other \end{matrix}\right.$

 $f+f^{‘}$也是G的一个流, $|f+f^{‘}|=|f|+|f^{‘}|$

5 增广路径。对于流网络G和流$|f|$,增广路径$p$是残存网络$G_{f}$的一条从s到t的简单路径。增广路径$p$上能够增加的流量的最大值为$p$的残存容量$c_{f}(p)=min\{c_{f}(u,v):(u,v)\in p\}$.定义函数$f_{p}:V \times V\rightarrow R$:

$f_{p}(u,v)=\left\{\begin{matrix}c_{f}(p) & (u,v)\in p \\ 0 & otherwise \end{matrix}\right.$

$f_{p}$是$G_{f}$的一个流,$|f_{p}|=c_{f}(p)>0$,$|f+f_{p}|=|f|+|f_{p}|>|f|$

6 流网络的切割。流网络G的一个切割$(S,T)$将顶点集合$V$划分为$S$和$T=V-S$,满足$s\in S,t\in T$。若$f$是一个流,那么切割$(S,T)$的净流量$f(S,T)$定义为:

$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)$

切割$(S,T)$的容量定义为:$c(S,T)=\sum_{u\in S}\sum_{v\in T}c(u,v)$

 

4的证明:

(1) $0\leq (f+f^{‘})(u,v) \leq c(u,v)$

有一个前提是$f^{‘}(v,u)\leq c_{f}(u,v)=f(u,v)$

$(f+f^{‘})(u,v)$

$=f(u,v)+f^{‘}(u,v)-f^{‘}(v,u)$

$\geq f(u,v)+f^{‘}(u,v)-f(v,u)$

$=f^{‘}(u,v)\geq 0$

$(f+f^{‘})(u,v)$

$=f(u,v)+f^{‘}(u,v)-f^{‘}(v,u)$

$\leq f(u,v)+f^{‘}(u,v)$

$\leq f(u,v)+c_{f}(u,v)$

$= f(u,v)+c(u,v)-f(u,v)$

$=c(u,v)$

 

以上是关于最大流学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

算法学习笔记(8.1): 网络最大流算法 EK, Dinic, ISAP

最大流学习笔记-推送重贴标签算法一

算法学习笔记(8.2): 上下界网络流

最大流学习笔记-前置重贴标签算法一

Java学习笔记之 IO包 字节流

IO流学习笔记