我正在阅读 http://www.geeksforgeeks.org/maximum-bipartite-matching/ 和 http://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm,但是我有些困惑。看起来,这个例子的假设是每个工作只能接受一个人,并且每个人只想要一份工作。我想知道如果例如v集合的容量大于1(可以雇用多个人),u集合大于1(每个人想要多份工作)的情况下,算法/代码会如何改变?
我正在阅读 http://www.geeksforgeeks.org/maximum-bipartite-matching/ 和 http://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm,但是我有些困惑。看起来,这个例子的假设是每个工作只能接受一个人,并且每个人只想要一份工作。我想知道如果例如v集合的容量大于1(可以雇用多个人),u集合大于1(每个人想要多份工作)的情况下,算法/代码会如何改变?
Jobs
到Terminal
的边缘容量(类似于Niklas B.在他的评论中所描述的方式,但不完全相同)。像这样:
从源
到人员
的容量为1,从人员
到工作
的容量也为1,这保证了一个人只会被选定一份工作(因为他们总体上能够贡献的最大流量为1)。然而,从工作
到终端
的容量> 1
允许分配多个人到该工作。源
到人员
的最大流量将增加该数量:
这里的i、j、k和x是整数的代表,其值应>= 1
。
关键是要记住,在People
左侧的流量容量决定了他们可以接受多少工作,而在Jobs
右侧的流量容量则决定了可以被分配该工作的人数。中间的容量不应更改。