图论:无向图中具有有界边权的查询

时间:2017-04-02 10:13:36

标签: algorithm graph

给出n <= 200000个节点和m <= 200000边的加权无向图。边权重(整数)可以高达1e9。有q <= 200000次查询。每个查询都提供两个节点u v和一个整数绑定p (<= 1e9)。如果uv之间有一条路径,路径中的每条边线权重都为<= p,则答案为yes其他no

请注意,路径不必最短。只是路径上的最大权重是<= p。天真的方法当然不起作用。如何快速回答查询(在O(n lg n)或类似的东西)?

2 个答案:

答案 0 :(得分:0)

您描述的问题称为:最广泛的路径问题,您可以在此处找到它:https://en.wikipedia.org/wiki/Widest_path_problem
可以很容易地证明u,v之间的路径,每个u,v的最小最大成本等于最小生成树。所以你需要找到最小生成树,以确保你已经最小化了最大值两个顶点之间的每条路径的成本u,v。
困难的部分是为每个查询决定从u到v的路径是否具有小于或等于p的最大成本

  • 最好的方法是使用笛卡尔树(在维基百科链接中描述),这将允许你在恒定时间内回答每个查询,我认为构建笛卡尔树将是O(nlogn)所以整体O(nlogn) + q)。但这种方法难以实施。

  • 我认为你找到的是在找到最小生成树后,使用最低共同祖先算法在logn中回答每个查询。找到最小生成树(O(E log E)并使用最低共同祖先进行一些预处理,以便能够回答O(log n)中的每个查询,从而整体为O(qlogn + ElogE)。可以在此处找到最低公共祖先和预处理的一种非常好的方法:https://www.topcoder.com/community/data-science/data-science-tutorials/range-minimum-query-and-lowest-common-ancestor/ 上面的文章很好地描述了所有解决方案,并提供了对您的问题有用的足够的帮助代码。

答案 1 :(得分:0)

  1. 首先从给定图表构建最小生成树。
  2. 然后您可以使用重光分解技术来回答logn中的每个查询。
  3. O的整体复杂性(mlogm + qlogn)。 您可以在以下链接中找到重光分解 https://blog.anudeep2011.com/heavy-light-decomposition/