【发布时间】:2015-11-06 20:03:10
【问题描述】:
我的问题很直接。
给出了一个加权树。我们必须找到两个给定节点之间的距离。
因为每次 bfs 超时时查询的数量都非常高(大约 75000),所以我尝试了不同的方法来做到这一点。
我的算法是这样的:
-
我从顶点 0 运行 dfs 并计算从 root(0) 到所有顶点的距离,类似这样
depth[v]=depth[u]+w,where u is parent of v and w is weight b/w (u,v) 一旦我使用 dfs 和每个节点的第 2^j 个父节点计算了所有节点的深度(假设我知道该怎么做)。我计算了 (u,v) 的 LCA询问每个查询。
-
然后我这样计算距离
distance between (u,v)=depth[u]+depth[v]-2*depth[lca(u,v)]
但我没有得到预期的正确判决。我的算法是正确的还是我遗漏了一些重要的东西。需要指导:)
P.s 如果有人想看我的实现-Link http://paste.ubuntu.com/13129038/
【问题讨论】:
标签: algorithm graph lowest-common-ancestor