作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们有一个包含 N 个节点和 N-1 个双向边的图(每条边都有一些权重 w)。现在我们必须回答 q 个查询。每个查询给出两个节点 u 和 v 以及任意边 x 的最大允许成本。如果从 u 到 v 的路径之间的所有边的单个边权重小于或等于 x,那么我们打印 Yes 否则我们打印No。
约束条件如下:
1 ≤ N,q ≤ 10^6
1 ≤ w,x ≤ 10^9
我已经尝试过蛮力解决方案,但它给出了 TLE。我知道我必须做一些预处理,但无法解决。我在这里发现了一个类似的问题,但没有人清楚地解决了那部分问题。
Maximum edge weight from one node A to node B .
您可以访问该链接以更好地解释问题。
最佳答案
这可以使用 Union Find(也称为 Diesjoint Set Union,如果从未听说过它,您可以查找实现 here)数据结构轻松解决,复杂度为 O(nlog(n) + qlog(q))
读取所有查询并将它们存储在某个数组结构中(保留查询信息 u v x 和查询索引)
按权重对所有查询排序
按权重对所有边进行排序
遍历所有查询,如果需要合并所有未合并的边,权重 <= 查询权重
如果节点 u 和 v 在同一个连通分量 (Find(u)==Find(v)) 中,则此查询的答案是 Yes else no
关于algorithm - 在无向无环图中找到两个节点之间的最大权重边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56619984/
我是一名优秀的程序员,十分优秀!