在无向无环图中找到两个节点之间的最大权重边

时间:2019-06-16 14:58:39

标签: algorithm graph-theory undirected-graph

我们有一个具有 N 个节点和 N-1 个双向边的图形(每个边的权重为 w )。 现在,我们必须回答 q 个查询。每个查询给出两个节点 u v 以及任意边缘 x 的最大允许成本。如果从 u v 的路径之间所有边缘的单个边缘权重小于或等于 x ,则我们打印,否则我们打印

约束如下:
1≤ N,q ≤10 ^ 6
1≤ w,x ≤10 ^ 9

我尝试过蛮力解决方案,但它给了TLE。我知道我必须做一些预处理,但是无法解决。 我在这里发现了一个类似的问题,但没人清楚地解决了这一部分。
Maximum edge weight from one node A to node B
您可以访问该链接以更好地解释问题。

1 个答案:

答案 0 :(得分:1)

可以使用O(n log(n)+ q)中的Union Find(也称为Diesjoint Set Union,如果从未听说过,可以查询实现here)数据结构来轻松解决。 log(q))

  1. 读取所有查询并将它们存储在某种数组结构中(保持查询信息,索引和查询索引)

  2. 按权重对所有查询进行排序

  3. 按重量排序所有边缘

  4. 遍历所有查询,如果需要,将所有仍未合并的边合并为权重<=查询权重

  5. 如果节点u和v在同一连接的组件中(Find(u)== Find(v)),则此查询的答案为是,否则为否

  6. 按所需顺序打印答案