【DayDayUp】【算法_图_网络流_之一_增广路】

本文介绍了网络流算法的核心概念,包括最大流问题、有向图、容量上限、起点S和终点E。关键在于增广路、剩余图和反向边的概念。当找不到增广路时,即达到最优解。网络流算法的复杂度为O(V E^2),其中V是点的数量,E是边的数量。文章通过瞎扯探讨了增广次数的来源,并分享了一个专业的网络流算法详解链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【坚持不能偷懒】

(概念简单说明,具体还请自行百度……)

网络流:

常见问题:最大流

一个图,有向图,边上有容量上限,许多点,起点S,终点E

从S到E,最多流量是多少


核心思想:

【增广路】【剩余图】【反向边】

朴素地说

我找完一条路了,把流量去掉

则加入【反向边】重新做图

做出的图就是【剩余图】


如果我还能找到一条流量不为0的路径

即是一条【增广路】

这条【增广路】的加入,使得流量更多

当无法找到【增广路】时,则为最优


什么是【反向边】

就是譬如我一条边是 A -> B

它能容纳 10 的流量

我已经在当前情况下,占用了8的流量

那么,我的某种更好的情况,或许需要让8变成76543210 或者 910

变成9 10比较容易,就是在剩余图中 A->B 10 改成 A->B 2

而如何【反悔】呢? 就是 B->A 原本没有(0) 改成 B->A 8



譬如

A -> B 10] B -> C 5] B -> D 5] C -> P 10] D -> P 10

那么我第一步,搜到一条 A,B,C,P 的 5 的流量

则图被更改为

A -> B 5] B -> C 0] B -> D 5] C -> P 5] D -> P 10

同时更新反向边

B -> A 5] C -> B 5] P -> C 5]


那么,解题过程就是


while 找到增广路 == true

更新图()


这个复杂度是多少呢(点为V,边为E)

每次找增广路,实际上是要搜尽的,也就是每条边来一次,E

网上说:“可以证明” 增广路的搜索次数不会超过 V * E

所以复杂度就是 O(V E^2) 还是很炸的 完全图最坏就是 V^5了

于是我们就要优化……




——瞎扯时间——

这个最多增广次数 V E 是咋个来的呢……

现在开始瞎扯,看能不能扯出来

思路一:

每次找到增广路,都会使得流量变大

如果一开始最小 是 某个 E(min)

最后最大的流量 是 ∑E(某些)

我的流量更新梯度是 E(min) 点点点 到 E(一坨)

这个上限是我源点S 和 汇点T 周围的流量和的最小值

就算都连上 也就是 V 个 单边的流量

好吧,扯不出来

思路二:

——瞎扯失败——


这个Blog上有对网络流的很专业很全面的讲解,感觉自己写的真是好low……

http://blog.youkuaiyun.com/fengchaokobe/article/details/7584781











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值