Practice Link

Author: Himanshu




Dynamic Programming, Tree


Consider the input tree as a rooted tree with root at vertex 1 .

This problem can be solved by the following dynamic programming (DP)

  1. Dp1 , v, k = Vertex v as of the conditions of the following sub-tree problem statement k divided into individual components, vertex v of the vertices of the components, including the minimum value of the sum of the A values ​​of the components including the vertex v when making all the A values ​​positive.
  2. Dp 2 , v, k = sub-tree below vertex v is divided into k components, and the condition of the problem statement is satisfied except for the component including vertex v of when such a component comprising a minimum value of the sum of the values.

However, when division is not possible, the corresponding DP array value is set to a sufficiently large value inf .

The DP is each vertex v ancillary, such as the following in the DP you will be prompted by performing-

  1. dp 1 , i, j = A subtree consisting of the i- th child of vertex v is dp 1 , v, k Divided into j components under the same conditions as when the v component comprising a minimum value of the sum.
  2. dp 2 , i, j As well.

Let’s consider the calculation amount of this DP . Since the number of states is O (N) , and each state update takes the worst O (N) time.

It seems to take O (N3 ) time in total, but if you observe closely, you can see that it works in O (N2) time in total.

The answer is the smallest value of k that satisfies dp 1 , 1 , k \neq inf or dp 2 , 1 , k < 0 minus 1




Setter’s Solution