上下界网络流

两盒软妹~` 提交于 2019-12-01 18:35:08

•参考资料

[1]:上下界网络流学习笔记

[2]:上下界网络流问题

[3]:上下界网络流

•理解

重在处理下界的限制。

对于一条边$u->v$,下界为$l$,上界为$r$。我们可以将这条边变为上界为$r-l$,下界为$0$。

相当于在可行流的基础上每条边的流量都减小了$l$。但是这样做了之后,流量却不守恒了。

流入$v$的流量少了$l$,流出$u$的流量也少了$l4。

所以要增加一个叫附加流的东西,使得这个附加流和我们的初始流合并之后满足流量守恒

即:

如果某个点在所有边流量等于下界的初始流中满足流量守恒,那么这个点在附加流中也满足流量守恒,

如果某个点在初始流中的流入量比流出量多$x$,那么这个点在附加流中的流出量比流入量多$x$.

如果某个点在初始流中的流入量比流出量少$x$,那么这个点在附加流中的流出量比流入量少$x$.

$x的值$可以枚举x的所有连边求出。比较方便的写法是开一个数组$du[]$,在输入边的时候,对于出点$u$,$du[u]-=l$,对于入点$v$,$du[v]+=l$

$du[i]$表示i在初始流中的流入量-流出量的值,那么$du[i]$的正负表示流入量和流出量的大小关系

建立一个超级源点$S$和超级汇点$T$,然后枚举所有的点$i$,

如果$du[i]<0$,则加$(i,T,-du[i])$,如果$du[i]>=0$,则加$(S,i,du[i])$

然后跑最大流,如果满流(也就是跑完最大流后所有正向边都为0)是可行的,否则不可行

最后,每条边在可行流中的流量=容量下界+附加流中它的流量(即跑完dinic之后所加反向边的权值).

•例题

【题目】

Zoj 2314 Reactor Cooling

【代码】

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!