题意就是给出一个图。有源汇
然后每条边都有容量的上下界限制。
问的是是否有一个最小流,使得每条边得流量都满足流量限制,并且流量守恒
我使用的是二分的方法。
每次二分都要重新构图,然后计算。
构图的方法是按照论文中所说。
设原来的源汇为s, t, 附加源汇为S, T
对于一个点i,计算流入该点的下界总和减去流出该点的下界总和为M[i].
如果M[i]是正数,添加边(S,i),容量为M[i]
否则添加边(i, T) 容量为-M[i]
然后对于每条边,设上下届分为up和down, 起点终点为u,v
那么添加边(u, v)流量为up - down即可
由于我们要二分一个流量然后判断可行。
假设二分的流量是x,则添加边(t, s) 流量为x
然后求最大流看是否使得源s连出去的边都满流。若都满流即为可行流。
最后求得的最小的该x即为最终原图中的最小流
输出边时则输出边得流量加上原来的down。因为我们之前减掉了。
#include
#include
#include
#include
#include
#include
#include
#include