我试图解决有关maximum-flow problem的问题。我有一个源和两个接收器。我需要在这个网络中找到最大流量。这部分是一般的最大流量。但是,在这个特殊版本的max-flow问题中,两个目标必须获得相同的流量。
有没有人可以帮助我,我该怎么办呢?
答案 0 :(得分:7)
让s
成为您的源顶点,t1
和t2
成为两个接收器。
您可以使用以下算法:
使用带有两个接收器的常规最大流量,例如通过具有无限容量的边缘将t1
和t2
连接到超级接收器。您现在拥有最大excess(t1) + excess(t2)
的解决方案,但它可能不平衡。
如果excess(t1) == excess(t2)
,您就完成了。否则,w.l.o.g。让excess(t1) > excess(t2)
在源步骤1的剩余网络中运行带有源t1
的另一轮最大流量并接收t2
。限制从t1
向c = floor((excess(t1) - excess(t2)) / 2)
传出的流量},例如,通过具有给定容量S
的边缘引入连接到t1
的超级源c
。现在,excess(t2)
是您可以发送到两个接收器的最大流量。
如果您需要重建每条边的流量值,请执行另一轮max-flow将excess(t1) - excess(t2)
剩余流量单位传输回源。
复杂性是你的max-flow算法的复杂性。
如果您已经知道如何使用下限容量来解决max-flow,您还可以对解法进行二进制搜索,从而导致复杂性O(log W * f)
,其中W
是解决方案值,{{1}是最大流量复杂度。