Given an N-Ary tree containing N nodes and an array weight [ ] that denotes the weight of the nodes which can be positive or negative, the task for every node is to print the maximum sum possible by a sequence of nodes including the current node.
Input: N = 7 weight = [-8, 9, 7, -4, 5, -10, -6] N-Ary tree: -8 / \ 9 7 / \ / -4 5 -10 / -6 Output: 13 14 13 10 14 3 4 Explanations: Node -8: [-8 + 9 + 7 + 5] = 13 Node 9: [9 + 5] = 14 Node 3: [7 + (-8) + 9 + 5] = 13 Node 4: [-4 + 9 + 5] = 10 Node: [5 + 9] = 14 Node 6: [-10 + 7 + (-8) + 9 + 5] = 3 Node 7: [-6 + (-4) + 9 + 5] = 4 Input: N = 6 weight = [2, -7, -5, 8, 4, -10] N-Ary tree: 2 / \ -7 -5 / \ \ 8 4 -10 Output: 7 7 2 8 7 -8
- Apply the first DFS to store the maximum sum possible for every node by including them in a sequence with their respective successors. Store the maximum possible sum in dp1. array.
- Maximum possible value for each node in the first DFS can be obtained by:
dp1[node] += maximum(0, dp1[child1], dp1[child2], …)
- Perform the second Dfs to update the maximum sum for each node in dp1 by including them in a sequence with their ancestors also. The maximum values stored in dp2 for every node are the required answers.
- Maximum possible value for each node in the second DFS can be obtained by:
dp2[node] = dp1[node] + maximum(0, maxSumAncestors)
Best answer can be obtained by including or excluding the maximum sum possible for its ancestors
where maxSumAncestors = dp2[parent] – maximum(0, dp1[node]), i.e. including or excluding contribution of the maximum sum of the current node stored in dp1
- Iterative Segment Tree (Range Maximum Query with Node Update)
- Queries to find sum of distance of a given node to every leaf node in a Weighted Tree
- Cartesian tree from inorder traversal | Segment Tree
- Build a segment tree for N-ary rooted tree
- Maximum of all subarrays of size K using Segment Tree
- Segment Tree | Set 1 (Sum of given range)
- Euler Tour | Subtree Sum using Segment Tree
- Two Dimensional Segment Tree | Sub-Matrix Sum
- Range Sum and Update in Array : Segment Tree using Stack
- Queries for the count of even digit sum elements in the given range using Segment Tree.
- Count of all possible Paths in a Tree such that Node X does not appear before Node Y
- Change a Binary Tree so that every node stores sum of all nodes in left subtree
- Find root of the tree where children id sum for every node is given
- Convert a Binary Tree such that every node stores the sum of all nodes in its right subtree
- Maximum sub-tree sum in a Binary Tree such that the sub-tree is also a BST
- Sum of the distances from every node to all other nodes is maximum
- Segment Tree | Set 2 (Range Minimum Query)
- Segment Tree | Set 3 (XOR of given range)
- Levelwise Alternating GCD and LCM of nodes in Segment Tree
- Iterative Segment Tree (Range Minimum Query)
Refer to the pictorial explanation for better understanding:
Below is the implementation of the above approach:
13 14 13 10 14 3
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.