MultipleSourceMultipleSinkMaxflow - 多源点多汇点最大流

问题

求网络流G=<V,E>G = <V,E>的最大流,GG是多源点、多汇点,边的容量都为正整数的网络。

解法

将多源点、多汇点的网络改造为单源点、单汇点的,就可以将该问题转化为普通的最大流问题。

nn个源点为[s1,s2,,sn][s_1, s_2, \dots, s_n]mm个汇点为[t1,t2,,tm][t_1, t_2, \dots, t_m],如下图所示:

新增源点ss和汇点tt,构造新增源点ss到所有源点s1,s2,,sns_1, s_2, \dots, s_n的边,容量为无穷大,即

c(s,si)=+c(s, s_i) = + \infty

其中1in1 \leq i \leq n

构造所有汇点t1,t2,,tmt_1, t_2, \dots, t_m到新增汇点tt的边,容量为无穷大,即

c(ti,t)=+c(t_i, t) = + \infty

其中1im1 \leq i \leq m

把原网络中的源点汇点当作普通节点,即可得到新的单源点、单汇点网络,如下图所示:

新网络的最大流即为原网络的最大流,该算法的时间复杂度与所采用最大流算法的时间复杂度相同。

源码

MultipleSourceMultipleSinkMaxFlow.h

MultipleSourceMultipleSinkMaxFlow.cpp

测试

MultipleSourceMultipleSinkMaxFlowTest.cpp

Last updated