前言

这个上下界网络流是一个以前我这个巨弱弱想都不敢想的一个东西。
然而,最近一次比赛居然考了这个东东。
于是整个机房掀起了破烂学上下界网络流的热。
那么我也来学学。

预备知识

要懂得很多很多的网络流知识比如最大流这种基础的。
当然,还有一个流量的平衡条件:
∑f(u,x)=∑f(x,v)\sum f(u,x)=\sum f(x,v)∑f(u,x)=∑f(x,v)
这个条件可以用来判断可行性。为什么呢?
这里有一条定义,自己看吧(其实画个图更容易理解)
——————————————————————————
在图中有一条从 s 到 t 的路径, 这条路径上起点 fo−fi=f, 终点 fi−fo=f, 其他的点 fi==fo, 并且所有的边的当前流量小于等于最大流量.(其中 fi 代表流入流量, fo 代表流出流量)
——————————————————————————

正题

实际上,这个上下界网络流是有很多种类型的,我一一来阐述。

无源汇上下界可行流

设,上界为up,下界为down
建图方法
我们可以考虑建一个新图。
首先弄一个新的源点和汇点ns和nt。
然后,对于原图中每条(u,v)的边,建u→v流量为up-down
然后,我们设一个d(x)表示x流入x点的边的下界和,减去流出x点的边的下界和。
当,d(x)>0则连ns→x流量为d(x)的边。
否则,d(x)<0则连x→nt流量为-d(x)的边。
我们不妨称后面这两条边为附加边。

流程
从源点流到汇点,当每条附加边已经流满的时候,则可以确定这个图可行。

证明
我们设一个g(u,v)表示实际流量f(u,v)=up(u,v)+g(u,v)
那么0<=g(u,v)<=up(u,v)-down(u,v)
如果我们不加附加边,这显然是错的。
那么我们看看附加边的作用:
因为要满足平衡条件∑f(u,x)=∑f(x,v)因为要满足平衡条件\sum f(u,x)=\sum f(x,v)因为要满足平衡条件∑f(u,x)=∑f(x,v)
那么∑down(u,x)+g(u,x)=∑down(x,v)+g(x,v)那么\sum down(u,x)+g(u,x)=\sum down(x,v)+g(x,v)那么∑down(u,x)+g(u,x)=∑down(x,v)+g(x,v)
∑down(u,x)−∑down(x,v)=∑g(x,v)−∑g(u,x)\sum down(u,x)-\sum down(x,v)=\sum g(x,v)-\sum g(u,x)∑down(u,x)−∑down(x,v)=∑g(x,v)−∑g(u,x)
因为d(x)=∑down(u,x)−∑down(x,v)因为d(x)=\sum down(u,x)-\sum down(x,v)因为d(x)=∑down(u,x)−∑down(x,v)
d(x)=∑g(x,v)−∑g(u,x)d(x)=\sum g(x,v)-\sum g(u,x)d(x)=∑g(x,v)−∑g(u,x)
当,d(x)>0时,那么d(x)+∑g(u,x)=∑g(x,v)d(x)+\sum g(u,x)=\sum g(x,v)d(x)+∑g(u,x)=∑g(x,v)
当,d(x)<0是,那么−d(x)+∑g(u,x)=∑g(x,v)-d(x)+\sum g(u,x)=\sum g(x,v)−d(x)+∑g(u,x)=∑g(x,v)
图长这样——

这样就可以保持新图的平衡条件。

有源汇上下界可行流

建图方法
由于原图中,只有源点与汇点不满足平衡条件,于是强行在汇点连条无线大流量个边到源点即可。
其余同上。
流程
同上。
证明
同上。

有源汇上下界最小流

建图方法
同“无源汇上下界可行流”
流程
先流一次ns→nt的最大流。
然后把t→s的边接上,流量为INF。
再流一次,答案即为t→s的流量。
证明
由于第一次流的时候就已经尽量地往其他边流了,而往t流的边比较少。
接上t→s后,流过这条边的都是其他流量流不到其他点的流量,从而十分巧妙地使得答案最小。

有源汇上下界最大流

建图方法
同“有源汇上下界可行流”
流程
先在这个图上判断可行性。
此时,超级源到超级汇的补流与分流的流量先加入答案。
然后,我们把超级源以及超级汇删掉,并且把t→s的边也删掉。
再做一遍最大流,即可。
证明
由于补流与分流是流每条边的下界的,一旦达到下界后,就代表可行。
此时,下界的答案即为补流与分流的流量。
但是光到达下界不行,还有可以到达上界到下界之间的答案。
于是乎,我们就把原来每条边的最大流加入答案即可。

费用流+上下界网络流

注,这里费用流是最小费用最大流,其他什么流应该是类似的思想。
建图方法
首先弄一个新的源点和汇点ns和nt。
然后,对于原图中每条(u,v,cost)的边,建u→v流量为up-down,费用为cost
然后,我们设一个d(x)表示x流入x点的边的下界和,减去流出x点的边的下界和。
当,d(x)>0则连ns→x流量为d(x),费用为0的边。
否则,d(x)<0则连x→nt流量为-d(x),费用为0的边。
当然,这个图是有源点与汇点的,那么连汇点到源点流量为无限大,费用为0即可。
流程
直接按照费用流的方式跑即可,因为答案统计是和上面一样的。
别跟我说你不会费用流
证明
由于这个图已经奇妙地转化成了普通图,所以不用说了吧。
运用
这个费用流只用于满足流量限制后的最小费用,不满足最大流。

优化

至此,上下界网络流的一些基本建图方法已经讲完了。
而且,经过我的一些观察,找到了两种建图方法——
一种是我上述的方法,在点少边多的图药效奇佳,而且好理性证明。
另一种是网上学到,在点多边少的图药效奇佳,但是我不会理性证明,只会很感性地理解。(画图)
在此口胡一下在“无源汇上下界可行流”的建图方法

  • 建立超级源与超级汇。
  • 对于一条边(u,v),建从v→u流量为up-down的边。(注意是v→u)
  • 然后建ns→v流量为down的边。
  • 然后建u→nt流量为down的边。
  • 之后直接求即可。

这个可以感性理解。
我们看到原来的u→v,由于下界是down,那么当这条边流过了down之后,相当于u失去down的水,v得到down的水,剩下的是up-down的水。
这样建图就可以模拟上述过程。

当然,也可以在最大流那优化。
如果你会sap、dinic之类的优秀算法,是可以优化很多。
如果你会把这sap与dinic两算法的优秀之处结合起来,也是可以优化很多。
对于费用流,可以打zkw使得程序跑得更快。
当然,如果你打预流推进或高标,时间会降得更多。

题外话

至于题目,网上一大堆。
至于板子,主要就是建图方式。

参考资料

https://blog.csdn.net/Clove_unique/article/details/54884437

学习上下界网络流小记相关推荐

  1. [BZOJ2502]清理雪道 有上下界网络流(最小流)

    2502: 清理雪道 Time Limit: 10 Sec  Memory Limit: 128 MB Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有 ...

  2. 有上下界网络流 ---- Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流

    学习资料+题目链接 题目大意: 模板讲解 #include <bits/stdc++.h> #define mid ((l + r) >> 1) #define Lson rt ...

  3. 有上下界网络流 ---- P4843 清理雪道(DAG图上最小路径重复边覆盖)【模板】有源汇上下界最小流

    题目链接 题目大意: 解题思路: 首先我们发现对于每条边至少要覆盖一次,最多覆盖无数次 那么就有点像上下界网络流了[1,INF][1,INF][1,INF]的限制关系 跑一边最小流就可以了!! #in ...

  4. 【有上下界网络流】【ZOJ】2314 Reactor Cooling

    [算法]有上下界网络流-无源汇(循环流) [题解]http://www.cnblogs.com/onioncyc/p/6496532.html //未提交 #include<cstdio> ...

  5. 有上下界的网络流1-无源汇带上下界网络流SGU194

    有上下界的网络流1-无源汇带上下界网络流SGU194 今天开始啃网络流了.对于求解无源汇带上下界的网络流,我们可以这样建图: 建图模型:          以前写的最大流默认的下界为0,而这里的下界却 ...

  6. 上下界网络流-无源汇可行流与有源汇最大流

    上下界网络流 2021.9.3 无源汇上下界可行流 之前的最大流讨论一般为有源无下届情况,那么无源汇有上下界可行流应如何求解? 首先要做的是消除下边界,应如何做?在有下届情形下,流网络中的任意一条边的 ...

  7. [上下界网络流][二分] Bzoj P2406 矩阵

    题目描述 输入输出格式 输入格式: 第一行两个数n.m,表示矩阵的大小. 接下来n行,每行m列,描述矩阵A. 最后一行两个数L,R. 输出格式: 第一行,输出最小的答案: 输入输出样例 输入样例#1: ...

  8. P2304 [NOI2015] 小园丁与老司机(网络流/上下界网络流)

    P2304 [NOI2015] 小园丁与老司机 平面上有n个点,每次可以向左.右.上.左上45度.右上45度移动,然后直线移动到达第一个没有到过的点,如果没有这样的点就不能移动,求解一条最长路,然后求 ...

  9. 有上下界网络流问题汇总

    无源汇有上下界可行流 法一(据说适合点少边多的图): 建图方法 首先建立附加源点ss和附加汇点tt 对于原图中的边x->y,若限制为[b,c],那么连边x->y,流量为c-b 对于原图中的 ...

最新文章

  1. 一图分析华为最新AI生态与未来趋势
  2. JavaWeb学习笔记28--Filter高级开发
  3. Java jni 底层_Java中的native是如何实现的(JNI)
  4. Product Master data in C4C and data exchange with CRM via PI
  5. 【ubuntu-qt-dlib】 配置问题 (一) undefined reference to `XPending'
  6. [转]Xcode的重构功能
  7. jflash view log_塑胶产品上的“LOG”是怎么来的?
  8. Java中Random详解
  9. 取得textarea中行的三种写法
  10. swift -懒加载创建view
  11. 在WPF控件上添加Windows窗口式调整大小行为
  12. 极品抓鸡36课------8080端口入侵笔记
  13. 解压版tomcat安装配置
  14. java游戏局域网实现的_java学习笔记: 实现简易局域网聊天程序
  15. 【计量经济学导论】16. 面板数据模型
  16. 分布式图数据库-JanusGraph简介
  17. 1.计算机网络的发展,计算机网络的发展史「简述」
  18. Ajax选项卡、隔行换色、弹出遮罩层…
  19. 苹果软件更新在哪里_苹果iOS 14.1/iPadOS 14.1正式版发布:新增更新机型[多图]-软件资讯...
  20. CASS9.2启动提示连接数据库失败的解决方案

热门文章

  1. python 爬取电子书_看kindle网站电子书用Python爬取下载
  2. ETCD介绍—etcd概念及原理方面分析
  3. DRL前沿之:End to End Learning for Self-Driving Cars
  4. 深度强化学习入门-05DQN实现高速超车(复现 deeptraffic:MIT 6.S094: Deep Learning for Self-Driving Cars)
  5. Type I and Type II errors
  6. ARM工控核心板在免疫荧光检测仪中的应用
  7. 2020年云栖大会阿里云线上直播地址
  8. 给AI写台词是怎样一种体验?Siri创意总监现身说法
  9. Ubuntu禁用Compiz
  10. python 乡镇轮廓 高德_基于高德地图api和Python的区县地理边界坐标提取