博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[上下界网络流]【学习笔记】
阅读量:5129 次
发布时间:2019-06-13

本文共 1158 字,大约阅读时间需要 3 分钟。

上下界网络流


前言

我花了几乎一个白天的时间来想为什么有源汇最大流求出的保证是原图的最大流...现在已经不想提这个东西了...简单记一下吧,乱七八糟的思考过程略去了


上下界网络流概述

网络流:满足容量限制和流量平衡

上下界网络流:同时有流量上界和流量下界
\[ \forall i \in V-\{s,t\},\ \sum_{(u,i)\in E}f(u,i) = \sum_{(i,v)\in E}f(i,v) \\ B(u,v) \le f(u,v) \le C(u,v) \\ \]
必须流:B
自由流:C-B

无源汇可行流

没有源点和汇点,要求每个点流量平衡

直接令\(f(u,v)=B(u,v)+g(u,v)\rightarrow g(u,v) \le C(u,v)-B(u,v)\)

这时候在附加网络中求出的可行流g不满足原网络流量平衡的限制,因为每条边下界不同
通过引入附加源汇ss,tt来补充流量
\(extra(i)=\sum_{(u,i)\in E}B(u,i) - \sum_{(i,v)\in E}B(i,v)\)
流入下界-流出下界
extra(i)>0, 需要额外流入流量; extra(i)<0, 需要额外流出流量.
分别让附加源和附加汇连边,然后求ss到tt的最大流,如果从ss出的所有边满流那么有解,求出的就是原图的一个可行流
这时候原图中每条边的流量\(f(u,v)=B(u,v)+g(u,v)\)

有源汇可行流

有源点s汇点t,求可行流

转化成无源汇可行流,t到s连INF的边就可以了

这时候s到t可行流的流量就是\(t \rightarrow s\)边的流量

有源汇最大流

有源点s汇点t,求最大流

求出有源汇可行流后,直接求s到t的最大流就可以了

原来的流量平衡且满足下界是不会受到影响的
并且这样求出的就是原图的最大流,我想了接近一天现在有点明白了吧
也可以把\(t \rightarrow s\)删掉求最大流再加上可行流的流量,效果相同

有源汇最小流

有源点s汇点t,求最小流

因为下界存在最小流才有意义!否则全0就可以了

先求有源汇可行流,这次我们要让自由流尽量少,删掉\(t \rightarrow s\)后求t到s的最大流,让可行流减去它就可以了

上下界费用可行流

有源点s汇点t,求最大/最小费用流

转化成无源汇可行流的建图,直接使用费用流算法求ss到tt的最大流

因为有下界的存在,这类费用流问题没有"最小费用最大流"之类的限制,只要是可行流就可以


总结

实现上注意两点易写错的地方:

  1. 加t到s容量INF的边
  2. extra为负的向t连边时容量为-extra

转载于:https://www.cnblogs.com/candy99/p/6637512.html

你可能感兴趣的文章
Java泛型的基本使用
查看>>
1076 Wifi密码 (15 分)
查看>>
noip模拟赛 党
查看>>
bzoj2038 [2009国家集训队]小Z的袜子(hose)
查看>>
Java反射机制及其Class类浅析
查看>>
Postman-----如何导入和导出
查看>>
移动设备显示尺寸大全 CSS3媒体查询
查看>>
图片等比例缩放及图片上下剧中
查看>>
【转载】Linux screen 命令详解
查看>>
background-clip,background-origin
查看>>
Android 高级UI设计笔记12:ImageSwitcher图片切换器
查看>>
【Linux】ping命令详解
查看>>
对团队成员公开感谢博客
查看>>
java学习第三天
查看>>
python目录
查看>>
django+uwsgi+nginx+sqlite3部署+screen
查看>>
Andriod小型管理系统(Activity,SQLite库操作,ListView操作)(源代码下载)
查看>>
在Server上得到数据组装成HTML后导出到Excel。两种方法。
查看>>
浅谈项目需求变更管理
查看>>
经典算法系列一-快速排序
查看>>