有正能量的流络网

前言

猫网猫络猫流帽是帽什帽么喵?

一些网络流基础算法的模板

主要记录一些本来不太会的东西。

上下界网络流

在一般的网络流问题上,对于每一条边额外添加了流量的上界和下界,并且依然要求除开源点和汇点之外所有点的流量守恒。

这个问题需要分很多步进行解决。

无源汇上下界可行流

因为上下界网络流是不一定有解的,所以先从可行流开始。

在没有源汇点的情况下,每个点都需要保证流量守恒,但是此时不要求流量最大。

考虑将原网络 \(G\) 拆分成两个新网络 \(P,Q\),其中 \(P\) 表示原网络的下界网络,\(Q\) 表示原网络的差值网络。

对于 \(G\) 中的一条边 \((u,v,l,r)\),映射到 \(P\) 中成为边 \((u,v,l)\),而映射到 \(Q\) 中成为边 \((u,v,r-l)\)

此时在 \(P\) 中的每一条边都必须满流,但是这样可能会导致某些点的流量不守恒,考虑将流量不守恒的影响放在 \(Q\) 上进行处理。

具体地,如果假设 \(P\) 中每条边都满流,对于点 \(i\),令其在 \(P\) 中的入流为 \(in_i\),出流为 \(out_i\)

\(in_i > out_i\),这意味着点 \(i\) 还有 \(in_i-out_i\) 的流量需要在 \(Q\) 上流出,于是新建超级源点 \(S\),并添加边 \((S,i,in_i-out_i)\) 即可。

\(out_i > in_i\),这意味着点 \(i\) 还有 \(out_i-in_i\) 的流量需要在 \(Q\) 上流入,于是新建超级汇点 \(T\),并添加边 \((i,T,out_i-in_i)\) 即可。

接下来在 \(Q\) 上跑从 \(S\)\(T\) 的最大流,若新添的边都能满流,则找到了一组可行流,每条边的实际流量即为其下界加上 \(Q\) 中的流量。

参考代码在这里。

有源汇上下界最大流

考虑把有源汇转化为无源汇,在汇点 \(T\) 和源点 \(S\) 间添加边 \((T,S,0,\infty)\) 即可。

然后跑无源汇上下界可行流,得到的流量即为边 \((T,S)\) 的流量。

然后再去掉边 \((T,S)\),在残量网络上跑从 \(S\)\(T\) 的最大流即可。

最终答案就是可行流加上第二次求出的最大流。

代码喵喵喵。

有源汇上下界最小流

类似最大流的求法,将第二次跑的最大流改为从 \(T\)\(S\) 的最大流即可。

意义是退掉尽量多的流。

posted @ 2026-01-15 16:08  jr_zch  阅读(4)  评论(2)    收藏  举报