设题目给的图是\(G\),其源点汇点分别是\(s,t\)
假设我们先求有源汇上下界可行流,我们发现此时跟无源汇上下界可行流的差别就是\(s,t\)没有流量守恒,于是我们添加一条边\((t,s)\),其容量限制为无穷,设添加边后的图为\(G_1\),那么\(G\)的可行流与\(G_1\)的可行流(注意\(G_1\)没有源点汇点,所以每个点都满足流量守恒)一一对应(对于\(G\)的一个可行流\(f\),令\(G_1\)的边\((t,s)\)的流量为\(|f|\),其余边的流量与\(G\)中对应的边的流量相同,得到了\(G_1\)的一个流\(f^{'}\),不难知道\(f^{'}\)与\(f\)一一对应),于是就转化成了无源汇上下界可行流:对\(G_1\)添加虚拟源点汇点\(S,T\)得到图\(G_2\),对\(G_2\)跑dinic,此时得到\(G_2\)的最大流\(f\)满足\(S\)的每条出边都是满的,\(T\)的每条入边都是满的(如果不满足,那么说明有源汇上下界可行流无解,有源汇上下界最大流肯定也无解了)
现在尝试解决有源汇上下界最大流,先直接给出做法:设上述dinic过程跑出的\(G_2\)的最大流\(f\)诱导出的残存网络为\(G_3\),在\(G_3\)中删掉\((t,s)\)这条边后将\(s,t\)当做源点和汇点跑dinic,设跑出的最大流为\(f_1\),那么答案就是\(|f|+|f_1|\)
证明:此时跑出来的增广路一定不包含\((t,s),S,T\)(因为增广路是简单路径,所以不包含\((t,s)\);因为\(G_3\)中\(S\)只有入边所以一旦进入\(S\)就出不去了,不可能到达\(t\),所以不包含\(S\);因为\(G_3\)中\(T\)只有出边所以无法进入\(T\),所以不包含\(T\)),这个dinic结束之后,\(s,t\)流量不守恒,将\(f\)与\(f_1\)相加,并令\(G_2\)中\((t,s)\)的权值为\(|f_1|\),此时不难验证仍然得到了\(G_2\)的一个最大流;对于\(G_2\)的任何一个最大流\(f_2\),将\(f_2\)与\(f\)相减得到\(f_3\)