我正在尝试解决tardos的以下问题。任何建议或帮助,将不胜感激。
已致电给您,以帮助某些网络管理员诊断其网络故障的程度。该网络旨在将流量从指定的源节点s传输到指定的目标节点t,因此我们将其建模为有向图G =(V,E),其中每个边的容量为1,其中每个节点位于从s到t的至少一条路径上。
现在,当网络中一切正常运行时,G中的最大s-t流量值为k。但是,当前的情况以及您在这里的原因是,攻击者破坏了网络中的某些边缘,因此,利用剩余的(幸存的)边缘,现在没有从s到t的路径。由于我们不会在这里讨论的原因,他们认为攻击者仅破坏了k条边缘,这是将s与t分开的最小数量(即,最小s-t切割的大小);并且我们假设他们相信这一点是正确的。 网络管理员正在节点s上运行监视池,该监视池具有以下行为:如果您对给定的节点v发出命令ping(v),它将告诉您当前是否存在从s到v的路径。因此,pint(t)报告当前不存在任何路径;另一方面,ping(s)始终报告从s到其自身的路径。)由于出去检查网络的每一个边缘都不切实际,他们希望通过明智地使用ping命令来确定使用此监视工具的故障程度。 因此,这就是您面临的问题:提供一种算法,向网络中的各个节点发出一系列ping命令,然后报告s当前无法访问的全部节点。当然,您可以通过ping网络中的每个节点来执行此操作,但是您希望使用更少的ping来执行此操作(假设仅删除了k条边)。在发出此序列时,允许您的算法根据之前的ping操作的结果来决定下一个要ping的节点。 给出一种仅使用O(k log n)ping即可完成此任务的算法。
答案 0 :(得分:1)
在整个网络上使用Floyd-Fulkerson计算最大流量,该流量将由k条边缘不相交的路径组成。
由于恰好删除了k条边,并且所有流都被切断,因此沿这些路径中的每条都必须删除了一条边。
对于每个最多包含n条边的路径,请使用O(log n)ping对路径上的节点进行二进制搜索以发现断边的位置。