给定具有N
个顶点的树,其中每个边具有权重1
。节点以C
颜色着色。我们希望为每种颜色找到该颜色的两个节点之间的最大最短距离。
我可以构建一个稀疏表,然后在O(log n)
中找到两个节点的LCA。然后检查所有相同颜色的对。这给出了O(n^2 log n)
。是否有可能比这更好?
答案 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)