当前位置: 首页 > news >正文

最大流学习笔记(1)

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

 

7 设$f$为流网络G的一个流,源点s,汇点t,设 $(S,T)$为G的任意切割,则横跨切割$(S,T)$的净流量$f(S,T)=|f|$

 

8 流网络G的任意流$f$的值不能超过G任意切割的容量。(容量的定义在6中)

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

$\leq \sum_{u\in S}\sum_{v\in T}f(u,v)$

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

$=c(S,T)$

 

9 最大流最小切割定理。设$f$为流网络G的一个流,下面的条件等价:

(1)$f$是G的一个最大流

(2)残存网络$G_{f}$不包括任何增广路径

(3)|f|=c(S,T),其中$(S,T)$是某个切割。

 

以下为证明

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

 (2)对所有的$u\in V-\{s,t\}$,满足$\sum_{v\in V}(f+f^{'})(u,v)=\sum_{v\in V}(f+f^{'})(v,u)$

 $\sum_{v\in V}(f+f^{'})(u,v)$

 $=\sum_{v\in V}(f(u,v)+f^{'}(u,v)-f^{'}(v,u))$

 $=\sum_{v\in V}(f(u,v))+\sum_{v\in V}f^{'}(u,v)-\sum_{v\in V}f^{'}(v,u)$

 $=\sum_{v\in V}(f(v,u)+f^{'}(v,u)-f^{'}(v,u))$

 $=\sum_{v\in V}(f+f^{'})(v,u)$

(3)$|f+f^{'}|=|f|+|f^{'}|$。我们假设G没有反平行边,即若$(u,v)\in E$那么$(v,u)\notin E$(如果G存在反平行边,假设是$(u,v)$,我们可以增加一个节点$w$ 和两条边$(u,w),(w,v)$来消除反平行边)。现在定义$V_{1}=\{v:(s,v)\in E\}$,$V_{v}=\{v:(v,s)\in E\}$,那么有$V_{1}\cap V_{2}=\phi $

$|f+f^{'}|=\sum_{v\in V}(f+f^{'})(s,v)-\sum_{v\in V}(f+f^{'})(v,s)$

$=\sum_{v\in V_{1}}(f+f^{'})(s,v)-\sum_{v\in V_{2}}(f+f^{'})(v,s)$

$=\sum_{v\in V_{1}}(f(s,v)+f^{'}(s,v)-f^{'}(v,s))-\sum_{v\in V_{2}}(f(v,s)+f^{'}(v,s)-f^{'}(s,v))$

$=\sum_{v\in V_{1}}f(s,v)-\sum_{v\in V_{2}}f(v,s)+\sum_{v\in V_{1}\cup V_{2}}f^{'}(s,v)-\sum_{v\in V_{1}\cup V_{2}}f^{'}(v,s)$

$=\sum_{v\in V}f(s,v)-\sum_{v\in V}f(v,s)+\sum_{v\in V}f^{'}(s,v)-\sum_{v\in V}f^{'}(v,s)$

$=|f|+|f^{'}|$

 

7的证明

首先由流量守恒,对任意$u\in V-\{s,t\}$,$\sum_{v\in V}f(u,v)-sum_{v\in V}f(v,u)=0$

$|f|=\sum_{v\in V}f(s,v)-\sum_{v\in V}f(v,s)$

$=\sum_{v\in V}f(s,v)-\sum_{v\in V}f(v,s)+\sum_{u\in S-\{s\}}(\sum_{v\in V}f(u,v)-\sum_{v\in V}f(v,u))$

$=\sum_{v\in V}f(s,v)-\sum_{v\in V}f(v,s)+\sum_{u\in S-\{s\}}\sum_{v\in V}f(u,v)-\sum_{u\in S-\{s\}}\sum_{v\in V}f(v,u)$

$=\sum_{v\in V}(f(s,v)+\sum_{u\in S-\{s\}}f(u,v))-\sum_{v\in V}(f(v,s)+\sum_{u\in S-\{s\}}f(v,u))$

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

 将V分解为$S$和$T=V-S$

$|f|=\sum_{v\in S}\sum_{u\in S}f(u,v)+\sum_{v\in T}\sum_{u\in S}f(u,v)$

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

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

$=f(S,T)$

 

9的证明

$(1)\Rightarrow (2)$假设$f$是G的一个最大流,但是$G_{f}$中还有一条增广路径$p$,那么由5可得加上$p$之后可以得到一个严格大于$|f|$的流,这与$f$是最大流矛盾。

$(2)\Rightarrow (3)$定义$S=\{v\in V:在G_{f}中存在一条从s到v的路径\}$,$T=V-S$,首先$s\in S$。由于$G_{f}$中不存在增广路径,所以不存在s到t的路径,所以$t\notin S$。所以$(S,T)$是G的一个切割。现在考虑一对节点$u\in S,v\in T$如果$(u,v)\in E$,必有$f(u,v)=c(u,v)$,否则边$(u,v)$将把$v$置于集合$S$;如果$(v,u)\in E$,必有$f(v,u)=0$,否则$c_{f}(u,v)=f(v,u)>0$,这使边$(u,v)\in E_{f}$,从而使得$v\in S$,所以

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

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

$=c(S,T)$

$(3)\Rightarrow (1)$ 根据8,对所有的切割$(S,T)$,$|f|\leq c(S,T)$,所有若$|f|=c(S,T)$,那么$f$是一个最大流

 

下一篇

转载于:https://www.cnblogs.com/jianglangcaijin/p/6009066.html

相关文章:

  • vue3 watchEffect 函数
  • Apaceh 多虚拟主机多站点配置两种方案
  • ubutnu安装geany
  • vue3生命周期钩子函数
  • 每天一个linux命令(11):nl命令
  • ABP文档 - 本地化
  • react-native 安卓真机环境搭建
  • vue3 自定义hook函数 和 toRef
  • git add . 的时候遇到warning: LF will be replaced by CRLF in ...... 解决办法
  • vue3 祖孙组件通讯传值 provide 与 inject 以及 响应式数据的判断
  • Unity3D 学习——入门资料整理
  • vue3父子组件传值 以及注意事项
  • “通过jumpserver远程登录linux服务器,rz上传文件速度过慢”问题的解决
  • vue项目 初始化 解决页面闪屏问题 v-cloak
  • Excle中LOOKUP经典用法
  • 【刷算法】求1+2+3+...+n
  • Android开源项目规范总结
  • Angular2开发踩坑系列-生产环境编译
  • Bytom交易说明(账户管理模式)
  • echarts的各种常用效果展示
  • SpiderData 2019年2月25日 DApp数据排行榜
  • vue.js框架原理浅析
  • 阿里云Kubernetes容器服务上体验Knative
  • 阿里云购买磁盘后挂载
  • 离散点最小(凸)包围边界查找
  • 如何在GitHub上创建个人博客
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 跳前端坑前,先看看这个!!
  • 微信开源mars源码分析1—上层samples分析
  • 线性表及其算法(java实现)
  • 小李飞刀:SQL题目刷起来!
  • 自制字幕遮挡器
  • 阿里云ACE认证学习知识点梳理
  • 阿里云服务器如何修改远程端口?
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • #ubuntu# #git# repository git config --global --add safe.directory
  • ${ }的特别功能
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (42)STM32——LCD显示屏实验笔记
  • (C语言)fgets与fputs函数详解
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .Net面试题4
  • .Net转前端开发-启航篇,如何定制博客园主题
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • [100天算法】-不同路径 III(day 73)
  • [BeginCTF]真龙之力
  • [C/C++]数据结构 栈和队列()
  • [C进阶] 数据在内存中的存储——浮点型篇