首页 > 解决方案 > 网络流算法相关问题

问题描述

我正在尝试解决来自 tardos 的以下问题。任何建议或帮助将不胜感激。

您被要求帮助一些网络管理员诊断他们网络中的故障程度。该网络旨在将流量从指定的源节点 s 传送到指定的目标节点 t,因此我们将其建模为有向图 G = (V,E),其中每条边的容量为 1,其中每个节点至少位于从 s 到 t 的一条路径上。

现在,当网络中的一切顺利运行时,G 中的最大 st 流的值为 k。然而,目前的情况——以及你在这里的原因——是攻击者已经破坏了网络中的一些边缘,因此现在没有使用剩余(幸存的)边缘从 s 到 t 的路径。由于我们不会在这里讨论的原因,他们认为攻击者只破坏了 k 个边,这是将 s 与 t 分开所需的最小数量(即最小 st 切割的大小);我们会假设他们相信这一点是正确的。网络管理员正在节点 s 上运行一个监控池,它具有以下行为:如果您发出命令 ping(v),对于给定的节点 v,它将告诉您当前是否存在从 s 到 v 的路径。(所以 pint(t) 报告当前不存在路径;另一方面,ping(s) 总是报告从 s 到它自己的路径。)由于出去检查网络的每个边缘是不切实际的,他们希望通过明智地使用这个监控工具来确定故障的程度平命令。所以这就是你面临的问题:给出一个算法,向网络中的各个节点发出一系列 ping 命令,然后报告当前无法从 s 访问的完整节点集。当然,您可以通过 ping 网络中的每个节点来执行此操作,但您希望使用更少的 ping 来执行此操作(假设仅删除了 k 个边)。在发出此序列时,您的算法可以根据先前 ping 操作的结果来决定下一个要 ping 的节点。给出一个仅使用 O(k log n) ping 即可完成此任务的算法。) 由于外出检查网络的每个边缘是不切实际的,因此他们希望通过明智地使用 ping 命令来确定使用此监控工具的故障程度。所以这就是你面临的问题:给出一个算法,向网络中的各个节点发出一系列 ping 命令,然后报告当前无法从 s 访问的完整节点集。当然,您可以通过 ping 网络中的每个节点来执行此操作,但您希望使用更少的 ping 来执行此操作(假设仅删除了 k 个边)。在发出此序列时,您的算法可以根据先前 ping 操作的结果来决定下一个要 ping 的节点。给出一个仅使用 O(k log n) ping 即可完成此任务的算法。) 由于外出检查网络的每个边缘是不切实际的,因此他们希望通过明智地使用 ping 命令来确定使用此监控工具的故障程度。所以这就是你面临的问题:给出一个算法,向网络中的各个节点发出一系列 ping 命令,然后报告当前无法从 s 访问的完整节点集。当然,您可以通过 ping 网络中的每个节点来执行此操作,但您希望使用更少的 ping 来执行此操作(假设仅删除了 k 个边)。在发出此序列时,您的算法可以根据先前 ping 操作的结果来决定下一个要 ping 的节点。给出一个仅使用 O(k log n) ping 即可完成此任务的算法。他们希望通过明智地使用 ping 命令来确定使用此监控工具的故障程度。所以这就是你面临的问题:给出一个算法,向网络中的各个节点发出一系列 ping 命令,然后报告当前无法从 s 访问的完整节点集。当然,您可以通过 ping 网络中的每个节点来执行此操作,但您希望使用更少的 ping 来执行此操作(假设仅删除了 k 个边)。在发出此序列时,您的算法可以根据先前 ping 操作的结果来决定下一个要 ping 的节点。给出一个仅使用 O(k log n) ping 即可完成此任务的算法。他们希望通过明智地使用 ping 命令来确定使用此监控工具的故障程度。所以这就是你面临的问题:给出一个算法,向网络中的各个节点发出一系列 ping 命令,然后报告当前无法从 s 访问的完整节点集。当然,您可以通过 ping 网络中的每个节点来执行此操作,但您希望使用更少的 ping 来执行此操作(假设仅删除了 k 个边)。在发出此序列时,允许您的算法根据先前 ping 操作的结果来决定接下来要 ping 哪个节点。给出一个仅使用 O(k log n) ping 即可完成此任务的算法。给出一个算法,向网络中的各个节点发出一系列 ping 命令,然后报告当前无法从 s 到达的完整节点集。当然,您可以通过 ping 网络中的每个节点来执行此操作,但您希望使用更少的 ping 来执行此操作(假设仅删除了 k 个边)。在发出此序列时,您的算法可以根据先前 ping 操作的结果来决定下一个要 ping 的节点。给出一个仅使用 O(k log n) ping 即可完成此任务的算法。给出一个算法,向网络中的各个节点发出一系列 ping 命令,然后报告当前无法从 s 到达的完整节点集。当然,您可以通过 ping 网络中的每个节点来执行此操作,但您希望使用更少的 ping 来执行此操作(假设仅删除了 k 个边)。在发出此序列时,您的算法可以根据先前 ping 操作的结果来决定下一个要 ping 的节点。给出一个仅使用 O(k log n) ping 即可完成此任务的算法。但是您希望使用更少的 ping 来执行此操作(假设仅删除了 k 个边)。在发出此序列时,您的算法可以根据先前 ping 操作的结果来决定下一个要 ping 的节点。给出一个仅使用 O(k log n) ping 即可完成此任务的算法。但是您希望使用更少的 ping 来执行此操作(假设仅删除了 k 个边)。在发出此序列时,您的算法可以根据先前 ping 操作的结果来决定下一个要 ping 的节点。给出一个仅使用 O(k log n) ping 即可完成此任务的算法。

标签: algorithmnetwork-flow

解决方案


在完整网络上使用 Floyd-Fulkerson 计算最大流量,该流量将由 k 个边缘不相交的路径组成。

由于恰好 k 条边已被删除,并且所有流都被切断,因此必须沿这些路径中的每一条都删除了一条边。

对于最多包含 n 条边的每条路径,使用对路径上节点的 O(log n) ping 进行二分搜索以发现断边的位置。


推荐阅读