【问题标题】:Maximum distance of two tree nodes with same color相同颜色的两个树节点的最大距离
【发布时间】:2016-07-14 00:06:24
【问题描述】:
给定一棵具有N 顶点的树,其中每条边的权重为1。节点用C 颜色着色。对于每种颜色,我们希望找到该颜色的两个节点之间的最大最短距离。
我可以建立一个稀疏表,然后在O(log n) 中找到两个节点的 LCA。然后检查所有相同颜色的对。这给出了O(n^2 log n)。有没有可能做得比这更好?
【问题讨论】:
标签:
algorithm
tree
shortest-path
graph-coloring
lowest-common-ancestor
【解决方案1】:
您可以适当地处理边缘并从每个节点开始递归遍历,就好像它是根一样。由于树有 N 个节点,N 次遍历会给你 O(N2)。边的 juggling 也应该花费 O(n) 时间,因为树中有 (n-1) 条边。如果您保留具有 C 行和 C 列的矩阵 M 并在每次遍历时对其进行更新,那么您可以在 O(N2) 总时间内完成所需的操作和空间复杂度。
基本上,您所做的将在从节点 U 开始的遍历中更新 M 的 cuth 行,颜色为 cu当您在距离 d 处以颜色 cv 到达节点 V 时,采用以下方式。
M[c
u][c
v] = max(M[c
u][c
v], d)