网络流基础
1. 基本概念#
流网络#
G=(V,E)
有向图,一个源点,一个汇点。每条边都有一个属性(容量)。
不考虑反向边
可行流#
可行流 f 需要满足
- 容量限制 ( 0≤f(u,v)≤c(u,v) )
- 流量守恒 (除了源点和汇点,其余点的流入等于流出)
|f| 表示可行流的流量
最大流#
指的是 最大可行流
残留网络#
针对流网络的某一条流
记作 Gf ,是由流 f 决定的
Vf=V , Ef=E+E 的反向边
残留网络 + 残留网络的一个可行流 = 原流网络的一个可行流
增广路径#
在残留网络中从源点出发边权都大于0,到汇点结束的简单路径叫做增广路径。
- 增广路径一定是一个可行流
- 增广路径流量大于0
若对于一个可行流 f ,其 残留网络 Gf 若不存在增广路,则可以断定 f 是一个最大流
割#
流网络 G=(V,E)
把点集 V 分成 S, T , S∩T=∅ , S∪T=V
s∈S , t∈T
割的容量#
所有从 S 到 T 的边的容量之和 c(S,T)=∑u∈S∑v∈Tc(u,v)
最小割指割的容量的最小值
割的流量#
f(S,T)=∑u∈S∑v∈Tf(u,v)−∑v∈T∑u∈Sf(v,u)
对任意的割,任意的一个可行流,割的流量一定小于等于割的容量
∀S,T ∀f,f(S,T)≤c(S,T)
对任意的割,任意的可行流,一定有割的流量等于可行流的流量
∀S,T ∀f|f|=f(S,T)
证明
首先有
f(S,T)=−f(T,S) , f(X,X)=0
f(S,X∪Y)=f(S,X)+f(S,Y) , X∩Y=∅
f(X∪Y,T)=f(X,T)+f(Y,T),X∩Y=∅
f(S,T)=f(S,V)−f(S,S)=f(S,V)=f(s,V)+f(S−s,V)=f(s,V)=|f|
最大流最小割定理#
- 流 f 是最大流
- 流 f 的残留网络中不存在增广路
- 存在某个割 [S,T] , |f|=c(S,T)
三者相互等价
一推二和三推一都比较简单
- ①推②
反证,若存在增广路,则可以更大流量
- ③推①
最大流 ≥|f|
最大流 ≤c(S,T)=|f|
所以 |f| = 最大流
最小割 ≤c(S,T)=|f|≤ 最大流
此时还有 最小割=最大流
- ②推③
S , 在 Gf 中,从 s 出发沿容量大于0的边走,所有能走到的点
T=V−S ,因为没有增广路,所以 S,T 是一个割
x∈S,y∈T , 有 f(x,y)=c(x,y) ,反向边 f(y,x)=0
所以 |f|=c(S,T)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· 从 Windows Forms 到微服务的经验教训