我们有一个具有 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。
您可以访问该链接以更好地解释问题。
答案 0 :(得分:1)
可以使用O(n log(n)+ q)中的Union Find(也称为Diesjoint Set Union,如果从未听说过,可以查询实现here)数据结构来轻松解决。 log(q))
读取所有查询并将它们存储在某种数组结构中(保持查询信息,索引和查询索引)
按权重对所有查询进行排序
按重量排序所有边缘
遍历所有查询,如果需要,将所有仍未合并的边合并为权重<=查询权重
如果节点u和v在同一连接的组件中(Find(u)== Find(v)),则此查询的答案为是,否则为否