带上下界的网络流
作者:互联网
带上下界的网络流的学习笔记啦~
注意:代码还在路上。
无源汇上下界可行流
模型
给定一个网络,求一个流,满足每条边的流量都 \(min⩽flow⩽max\) ,并且每个点都满足 总流入量=总流出量(流量守恒) ,没有源汇。
思路
核心是将一个不满足流量守恒的初始流调整成满足流量守恒的流
初始流,不一定满足流量守恒,每条边的流量都是这条边的流量下界
附加流,不一定满足流量守恒,但是和初始流的叠加流满足流量守恒
新增虚拟源点汇点\(s,t\)
设\(d[i]=\)流入量-流出量
- \(d[i]>0\) ,\(s\)向\(i\)连流量为\(d[i]\)的边
- \(d[i]<0\),\(i\)向\(t\)连流量为\(-d[i]\)的边
每条边的流量变为\(up-down\),就是上界减下界
有可行流的必要条件是\(s\)的出边的流量总和等于\(t\)的入边的流量总和
存在可行流的条件\(s\)到\(t\)的最大流\(=\sum_{d[i]>0} d[i]\)
最后,每条边的实际流量就是初始流+附加流
Code
咕咕咕
有源汇上下界可行流
模型
满足源点流出量\(=\)汇点流入量,其它节点流量守恒,每条边都满足上下界限制
思路
建一条从\(t\)到\(s\)的边上界为\(inf\),下界为\(0\),这样就可以转化成无源汇的模型
然后最后整个网络的流量就是边\(t \rightarrow s\)的流量
Code
咕咕咕
有源汇上下界最大流
模型
有源汇的可行流的情况下满足总流量最大
思路
最大流\(=\)可行流流量\(+\)新增广的\(s\)到\(t\)的最大流
在求完可行流之后,在对原图的残余网络求一次最大流
因为是在更改附加流,对原来的流量上界不会造成影响
Code
咕咕咕
有源汇上下界最小流
模型
有源汇的可行流的情况下满足总流量最小
思路
最大流\(=\)可行流流量\(-\)新增广的\(t\)到\(s\)的最小流
相当于是在跑反向边,跑的过程中是不会改变流量守恒的
而且是在更改附加流,对原来的流量下界也不造成影响
Code
咕咕咕
无源汇上下界最小/大费用可行流
模型
在无源汇上下界可行流的基础上,要求费用最小/大。
思路
每条边的费用是不变的,和虚拟源汇的边费用是\(0\)
把跑最大流改为跑最小/大费用最大流
Code
咕咕咕
无源汇上下界最小/大费用可行流
模型
在有源汇上下界可行流的基础上,要求费用最小/大。
思路
每条边的费用是不变的,和虚拟源汇的边费用是\(0\)
把跑最大流改为跑最小/大费用最大流
Code
咕咕咕
Blog来自PaperCloud,未经允许,请勿转载,TKS!
标签:可行,守恒,网络,流量,下界,Code,带上,汇上 来源: https://www.cnblogs.com/PaperCloud/p/ud_liu.html