解决问题_使用最大流量

时间:2016-03-27 09:10:05

标签: algorithm graph

我正在尝试解决此问题Problem

问题陈述如下

伟大的Charzeh正和Joffrey Baratheon一起玩游戏。七个王国中有n个骑士。 i-th骑士的力量等于ai (0 ≤ ai < m)。黑色城堡的墙壁上还有n+m-1 numbers f0, f1, ..., fn+m-2

&#34;游戏&#34;由两个回合组成。在第一个回合中,Charzeh选择数字的排列0, 1, ..., n-1 like p0, p1, ..., pn-1

在第二轮Joffrey选择并整数i (0 ≤ i < n)然后斩首fpi + ai Winterfell的随机居民。 Charzeh很善良,Joffrey很残酷。这就是为什么Charzeh试图最小化和Joffrey试图最大限度地斩杀数字的人。

如果他们都发挥得最好,有多少人会死?

输入:

7 0 9 1
5 61 53 6 7 72 75 42 5 79 91 5 16

答案是7

当我通过社论时,显示它可以使用Maximum Min um Flow解决。我不知道这些算法在这里是如何工作的。任何人都可以解释我如何解决这个问题,即让我了解这个算法如何在这里工作。

1 个答案:

答案 0 :(得分:1)

唯一重要的值是max(fpi + ai)。所以问题实际上是最小值X,这样至少有一个排列,其中fpi + ai <= X表示i的所有值。

要检查是否存在这种排列,您可以创建二分图。一方面,您有与f的位置对应的节点,另一方面,您有与a的值对应的节点。您在f[x]a[y] iff f[x] + a[y] <= X之间有一个优势,即如果您对f[x]a[y]配对的排列适合该解决方案。所有权重应为1.您现在可以在结果图上计算最大流量。如果你能够推出n个流量单位(连接你拥有的所有n个节点),那么这是一个满足初始条件(fpi + ai <= X)的排列。

所以现在你所要做的就是对最小X进行二元搜索,你仍然可以在相应的图中找到n个单位的流量。如果我没有误会,复杂性将是O(log(N+M)*N^3),日志来自二进制搜索,N^3来自流算法。

您还可以尝试使用以下事实:当您增加X时,相应的图形严格地是原始图形的超集(您不会通过增加X来移除边缘)。这意味着到目前为止你找到的X值较低的部分解是一个合理的起点,用于计算增加X值的流量。另一种方式也是如此,但它更麻烦(你需要找到边缘)用于不再满足条件并在图中找到替代连接)。但除非你需要挤出最后一点性能,否则我不会为额外的复杂性而烦恼。