【问题标题】:How to find the weight of heaviest edge in the path between two nodes in a tree?如何找到树中两个节点之间路径中最重边的权重?
【发布时间】:2015-12-23 04:48:43
【问题描述】:

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

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

但我不知道我可以在该算法中的何处存储重量信息。有什么想法吗??

【问题讨论】:

  • 如果您有路径,这是一个简单的 Max 问题 - 暂时存储您在遍历时看到的最大值,如果您看到更大的值则替换它
  • 是的,这当然可以工作,但它的复杂性是 O(N) 最坏的情况,我可能会被问到这个问题 N 次以上,所以我及时超出了界限。虽然很抱歉,但应该在我的问题中提到这一点......

标签: algorithm graph


【解决方案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

【讨论】:

  • 您能否详细说明,因为我没有完全理解您的答案?首先,你是什么意思输出树?然后我了解删除最重的边缘并制作子树,但是我怎样才能使用它来快速找到最重的边缘??
  • @ThemistoklisHaris 您将树预处理成另一棵树,然后将其提供给 LCA 预处理器。
  • 需要解释树的变换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多