如何在树中找到节点的最大总和

时间:2018-04-05 19:26:10

标签: c algorithm data-structures tree dynamic-programming

我得到两个数组,一个定义节点的关系,另一个定义节点的值。

arr1={0,1,1,1,3,3,4}
arr2={22,100,3,3,4,5,9}

arr1定义了关系,即根节点是第1个元素,节点2,3的父节点,第4个是节点1,节点5和6的父节点是根节点3,节点7节节点的父节点是节点4。

arr2给出节点的值,节点1的值为22,节点2的值为100.

我必须找到节点的最大总和,这样就不会有两个包含节点的父节点或父节点关系。

示例输入:

a[i]=[0,1,1,1,3,3,6,6]
b[i]=[1,2,3,4,5,100,7,8]

output: 111

我是DS和ALGO的新手,甚至无法想到解决方案。需要帮助谢谢。 任何类型的帮助都可以。

1 个答案:

答案 0 :(得分:1)

您可以使用Dynamic Programming解决此问题。 考虑一个数组dp[],它存储每个顶点及其子树的答案。

现在DP的状态为,

dp[currentVertex] = max(sum of all children's dp[] ,
                        b[currentVertex] + sum of all vertices' dp[] whose 
                        greatGrandParent is currentVertex])

您需要使用自下而上的方法构建DP表。所以从树叶开始。

在完成所有计算后,答案为dp[root]