通过删除子树来最大化根树的权重

时间:2019-04-08 05:32:22

标签: algorithm graph-theory

我有一棵以1为根的树。我可以删除任何节点的整个子树,并且可以执行任何操作。的时间。

假设我们执行了上述操作k no。的时间。我们需要最大化Total_weight-C * k,其中C是一个正常数。

节点的权重可以为正,也可以为负。

对于例如-(1,1)(2,-5)(3,-5)是节点,并且1-2和2-3即1,2和2,3连接。让c为1,因此在这种情况下,我们可以删除2的子树以使权重最大化,这将是1-1 * 1 = 0。

我可以尝试找出每个子树的权重,并删除所有权重小于以1为根的树的权重的子树,但这不是最佳策略。我需要一个O(V)算法。

感谢您对确定最佳算法的任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以轻松地递归解决此问题:

  • 为根的所有子代解决问题
  • 如果您选择丢弃整棵树,则得到 -C 的分数。如果选择保留树,则应该对子树使用最佳解,这将给您得分。 根的权重+子树的分数总和,只需充分利用这两者的优势即可。