如何在树中两个节点之间的路径中找到最重边缘的权重?

时间:2015-12-22 19:29:34

标签: algorithm graph

我听说过的想法是使用二进制提升方法找到这两个节点的最低共同祖先(LCA)。要了解更多信息:

https://www.topcoder.com/community/data-science/data-science-tutorials/range-minimum-query-and-lowest-common-ancestor/#Lowest%20Common%20Ancestor%20(LCA)

但我不知道该算法在哪里可以存储重量信息。任何想法??

1 个答案:

答案 0 :(得分:1)

为LCA构建树,如下所示。在加权输入树中,找到最重的边,删除它,并递归地构造两个(输出)树,一个用于输入的每个剩余组件。使这些输出树成为新创建的根的子节点。 (基本情况是将单个顶点转换为单个顶点。)

假设我们有一个无根加权树:

    1     5     4
 A-----B-----C-----D
       |     |
       |2    |3
       |     |
       E     F

我们为LCA准备的有根树是:

        5
       / \
      /   \
     /     \
    2       4
   / \     / \
  1   E   D   3
 / \         / \
A   B       C   F