网络流-最大流最小割(带证明)-算法笔记

本文详细介绍了网络流中的最大流最小割概念,包括流与割的定义、容量计算、最大流寻找算法及证明。通过引理和贪心算法解释了最大流与最小割之间的关系,并通过残余图解析了增广路径。最后,文章提供了关键的证明思路和代码示例。
摘要由CSDN通过智能技术生成

流与割定义

割定义

对于图Graph(V,E)
s-t割是对顶点集V的一个划分,使得s属于A,t属于B.

割的容量定义

cap(A,B)=∑c(e) e out of A 即A的流出容量, 用c表示
最小割,找到最小容量的割

流的定义

一个s-t流满足:
对于每个边来讲0大于等于f(e)大于等于c(e)
对于每个顶点属于除了v属于V/{s,t} 他们的出流量都等于入流量

流量

等于s的所有输出流量一般用f表示

最大流寻找算法

引理

1.lemma (A,B) 是任意割, A的流出值-A的流入值=流量

2.lemma 弱对偶 流始终小于等于割的容量 v(f)<=cap(A,B)

3.最大流等于最小割

贪心算法

Greedy algorithm.

  • Start with f(e) = 0 for all edge e.
  • Find an s-t path P where each edge has f(e) < c(e).
  • Augment flow along path P.
  • Repeat until you get stuck.

引入残余图residual graph-增广路径的方法
主要思路是撤销’走错’的路径
e=(u,v) e^r=(v,u)
残余容量定义:
cf(e)=e(e)-f(e) e属于E
cf(e)=f(e) e^r属于E

最大流等于最小割证明(重点)

1.存在割使得v(f)=c(A,B)
2.f是最大流
3.这没有增广路径
证明思路 1=>2 2=>3 3=>1

3=>1稍微有点绕,
在残余图中,设A是s能到达的顶点集合。

v(f)=∑f(e) e out of A - ∑f(e) e into A

可得
1.∑f(e) e out of A=∑c(e) e out of A
因为根据s定义,A是可到达的。
反证:若A连接B的一边还有剩余容量,说明t可以顺着那条路到达B,因而和A定义矛盾。
2.∑f(e) e into A=0
因为是残余图,每条边均有两个方向(双向),出和入之和等于容量。出的方向的流量等于容量了,那入的方向自然等于0。

代码示例

int dfs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值