我有这样的问题:
我们得到一个二分图。例如
A1 B1
A2 B2
A3 B3
A4
这是邻接表表示(假设图是双向的)
B1 -> A2, A3
B2 -> A2, A3, A4
B3 -> A1
最终结果应该是左侧 (As) 中的所有节点恰好有 1 个传入边,同时 - 我们需要最小化需要从单个 Bs 节点出来的最大边数。在这种情况下,答案将是:
B3 can connect to A1
B2 can connect to A2, A4
B1 can connect to A3
所以这里需要从单个 Bs 节点出来的最大边数是 2。我们不能覆盖所有 As,同时有一个 B 节点没有 2 个边从它出来覆盖 As。
另一个例子:
A1 B1
A2 B2
A3 B3
A4 B4
B1 -> A1, A2, A3
B2 -> A1, A2, A3, A4
B3 -> A1, A2, A3
B4 -> A1, A2, A3
在这种情况下,答案将是:
B1 can connect to A1
B2 can connect to A4
B3 can connect to A3
B2 can connect to A2
这样,我们将只覆盖所有 A 一次,同时我们最小化了需要从单个 B 中取出的最大边数。所以这里需要从单个 Bs 节点出来的最大边数是 1。
另一个例子:
A1 B1
A2 B2
A3 B3
A4
A5
A6
B1 -> A6
B2 -> A1, A2, A3, A4, A5
B3 ->
在这种情况下,答案将是 5,即需要从单个 B 中取出的最大边数是 5。不能少于这个数。
我已经实现了基本的福特富尔克森算法,我知道这也是网络流,但不知道如何与之相关。
如果有人可以对图表提供一些提示,那就太好了。
谢谢