algorithm - 树中两个节点之间路径的权重和

标签 algorithm data-structures graph

给你一棵有 n 个顶点的树。每个节点都有一个与之关联的整数权重。 给定树上有大量查询(~n^2)。 对于查询(A,B),其中A,B是树的两个顶点,您需要计算从A到B的唯一路径上的节点的权重之和,包括A和B。

我可以为单个查询执行 dfs/bfs,但这将花费 O(n^3) 来处理 ~n^2 可能的查询.. 任何人都可以提出更好的建议,每个查询花费的时间少于 O(n) 吗?

谢谢..

最佳答案

如果树没有根,则使任意节点成为树的根。

我们将用 W[x] 表示节点 x 的权重,用 C[x] 表示从根节点到节点 x 的所有节点的权重之和。

现在假设有一个查询,如 u, v:

我们必须找到节点 u 和 v 的最低公共(public)祖先。假设 u 和 v 的 LCA 是 P。所以查询 (u,v) 的结果将是 C[u]-C [P]+C[v]-C[P]+W[P]

关于algorithm - 树中两个节点之间路径的权重和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17962687/

相关文章:

c - 显示功能不打印链接列表的值

c - 用于频繁随机访问的数组或链表?

python - matplotlib pyplot.show : Invalid RGBA

JavaScript图形趋势线(区域背景颜色)和颠倒的y轴

java - 图的可视化

java - 为什么 long,而不是 int 否则限制时间超过

php - 合并并重新排序 3 个数组

c# - 删除其中一条后对剩余记录重新编号

c++ - 如何创建 DAWG?

algorithm - 如何找到空闲区域矩形?