我正在阅读http://www.geeksforgeeks.org/maximum-bipartite-matching/和http://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm,但我很难理解。似乎这个例子假设每个工作只能接受1个人,每个人想要1个工作。我想知道如果例如v set具有容量>算法/代码将如何改变。 1(可以为该工作雇用多人)和你的设置> 1(每个人想要超过1份工作)?
答案 0 :(得分:8)
要允许作业分配多个人,您只需修改Jobs
到Terminal
的边距容量(类似于Niklas B.在{{3}中所述的方式) },但不完全是。)
像这样:
从Source
到People
以及从People
到Jobs
的1的容量保证只会为一项工作选择一个人(因为他们可以贡献的最大流量是1)。但是,从> 1
到Jobs
的容量Terminal
允许可以为该作业分配多个人。
如果一个人也可以执行多于一项的工作,那么从Source
到Person
的最大流量会增加该数量:
其中i
,j
,k
和x
是值为>= 1
这里要记住的关键是People
左侧的流量指示他们可以采取多少工作,而Jobs
右侧的流量指示可以分配多少人那份工作。中间的能力不应该改变。