具有相同颜色的两个树节点的最大距离

时间:2016-03-26 08:54:35

标签: algorithm tree shortest-path graph-coloring lowest-common-ancestor

给定具有N个顶点的树,其中每个边具有权重1。节点以C颜色着色。我们希望为每种颜色找到该颜色的两个节点之间的最大最短距离。

我可以构建一个稀疏表,然后在O(log n)中找到两个节点的LCA。然后检查所有相同颜色的对。这给出了O(n^2 log n)。是否有可能比这更好?

1 个答案:

答案 0 :(得分:0)

您可以正确地处理边缘并从每个节点开始执行递归遍历,就像它是根一样。由于树有N个节点,N次遍历会给你 O(N 2 。边缘的杂耍也应该采用 O(n)时间,因为树中有(n-1)条边。如果你保留一个带有C行和C列的矩阵M并将其更新为经历每次遍历,那么你可以在 O(N 2 总时间内做你想做的事情空间复杂性。

基本上你要做的是在从颜色为c u 的节点U开始的遍历中更新M的c u th 行当您到达距离为d v 的节点V时,采用以下方式。

M[cu][cv] = max(M[cu][cv], d)