algorithm - 通过删除子树最大化有根树的权重

标签 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) 算法。

如果能帮助确定最佳算法,我们将不胜感激。

最佳答案

你可以很容易地递归地解决这个问题:

  • 为根的所有 child 解决问题
  • 如果您选择丢弃整棵树,您会得到 -C 的分数,如果您选择保留这棵树,那么您应该使用子树的最优解,这会给您分数根的权重+子树的得分之和,取两者中最好的即可。

关于algorithm - 通过删除子树最大化有根树的权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55566781/

相关文章:

algorithm - 需要从给定输入生成 "echo text"的算法的想法

algorithm - 有人可以解释广度优先搜索吗?

algorithm - 构建数组中元素的有向正则图

计算多项式倒数的算法

javascript - 显示范围算法?

algorithm - 查找图中所有独立连接

networking - 生成图形的图片/图形

c# - 收集带有后向和前向链接的 DAG 的所有路径

algorithm - 比较两条路径的相似性

python - "Find the longest substring with k-unique characters"的时间复杂度?