Multiple Source Multiple Sink Max flow - 多源点多汇点最大流


问题

求网络流的最大流,是多源点、多汇点,边的容量都为正整数的网络。

解法

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

个源点为个汇点为,如下图所示:

新增源点和汇点,构造新增源点到所有源点的边,容量为无穷大,即

其中

构造所有汇点到新增汇点的边,容量为无穷大,即

其中

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

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


源码

MultipleSourceMultipleSinkMaxFlow.h

MultipleSourceMultipleSinkMaxFlow.cpp

测试

MultipleSourceMultipleSinkMaxFlowTest.cpp