【问题标题】:Solving a problem_ Using Maximum Flow解决问题_使用最大流量
【发布时间】:2016-03-27 09:10:04
【问题描述】:

我正在尝试解决这个问题Problem

问题陈述如下

伟大的查泽正在和乔佛里·拜拉席恩玩游戏。七个王国有n骑士。 i-th 骑士的力量等于ai (0 ≤ ai < m)。黑色城堡的墙上还有n+m-1 numbers f0, f1, ..., fn+m-2

“游戏”由两个回合组成。在第一回合,Charzeh 选择了一个数字排列0, 1, ..., n-1 like p0, p1, ..., pn-1

在第二回合乔佛里选择整数i (0 ≤ i < n),然后斩首fpi + ai临冬城的随机居民。查泽很善良,乔佛里很残忍。这就是为什么查泽尽量减少而乔佛里尽量增加被斩首人数的原因。

如果他们都发挥最佳,会死多少人?

对于输入:

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

答案是7

当我浏览社论时,它显示可以使用最大最小流量来解决。我不知道这个算法在这里是如何工作的。谁能解释我如何解决这个问题,即告诉我这个算法是如何在这里工作的。

【问题讨论】:

    标签: algorithm graph


    【解决方案1】:

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

    要检查是否存在这样的排列,您可以创建一个二分图。一方面,您有对应于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 的增加值的流量的合理起点。另一种方式也适用,但它更加混乱(您需要找到边缘使用不再满足条件并在图中找到替代连接)。但是,除非您需要压缩最后一点性能,否则我不会为额外的复杂性而烦恼。

    【讨论】:

    • 谢谢!!你能回答这个question
    • 我尝试实现Code,但得到错误答案....请帮助!!!!!!
    • 我也添加了对该问题的答案,但我相信您可以在网上找到更好的解释。至于代码,我对Java不是很熟悉,你可以试试codereview.stackexchange.com。
    猜你喜欢
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2021-12-12
    • 1970-01-01
    • 2021-10-05
    • 2020-04-08
    • 1970-01-01
    相关资源
    最近更新 更多