有正能量的流络网
前言
猫网猫络猫流帽是帽什帽么喵?
一些网络流基础算法的模板。
主要记录一些本来不太会的东西。
上下界网络流
在一般的网络流问题上,对于每一条边额外添加了流量的上界和下界,并且依然要求除开源点和汇点之外所有点的流量守恒。
这个问题需要分很多步进行解决。
无源汇上下界可行流
因为上下界网络流是不一定有解的,所以先从可行流开始。
在没有源汇点的情况下,每个点都需要保证流量守恒,但是此时不要求流量最大。
考虑将原网络 \(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\) 的最大流即可。
意义是退掉尽量多的流。

浙公网安备 33010602011771号