我正在尝试解决此问题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解决。我不知道这些算法在这里是如何工作的。任何人都可以解释我如何解决这个问题,即让我了解这个算法如何在这里工作。
答案 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值的流量。另一种方式也是如此,但它更麻烦(你需要找到边缘)用于不再满足条件并在图中找到替代连接)。但除非你需要挤出最后一点性能,否则我不会为额外的复杂性而烦恼。