图论:树节点的最大子集,使最小距离为d

时间:2017-04-28 09:45:28

标签: algorithm optimization tree dynamic-programming graph-theory

给出n个顶点上的树。选择最大数量的节点,使得所选节点中没有两个节点的距离小于d。输出是最大节点数。此处nd最高可为10^5。如何在线性或拟线性时间内解决?

1 个答案:

答案 0 :(得分:0)

是的:)

  • 如果你取根,那么最优值是1加上低于d级的子树的最优值之和。
  • 否则,它是root的子级值(不包括+1)的总和。

因此,您应采用自下而上的方法(或递归WITH MEMOIZATION)计算节点子树的最佳值。如果节点是叶子,则值为1.否则,请使用上面写的规则。

您应该尝试仅计算每个节点的值一次,并且每个节点的值仅用于其父节点及其第d个祖父节点,因此您的复杂度为O(n)