Editorial for WC '15 Contest 1 S4 - Chocolate Milk
Submitting an official solution before solving the problem yourself is a bannable offence.
Once again, we can see the system as a graph with nodes (cisterns). Due to the fact that there are edges and no cycles, we can also see that the graph is a tree. You can read more about properties of trees from this article. In this case, we can see that cistern is the root of the tree, and that cistern is the parent of node . In addition, the problem conveniently guarantees that node is the parent of node if and only if . Everything about it points towards a solution using the classic dynamic programming (DP) on a tree approach. Many articles for DP on a tree can be found with a quick search online.
Let our dynamic programming state represent the maximum amount of chocolate milk which can flow into cistern (from all sources, direct or indirect), after of the pipes in 's subtree (not including the pipe leading down from it, if any) have been upgraded. The final answer (the maximum amount of chocolate milk which can flow into cistern after pipes have been upgraded) will then be .
For each cistern from down to , we'll compute all at once based on the DP values of its children. For each of its child , we can choose to distribute some number of pipe upgrades to its subtree, and we can choose to either upgrade to pipe from to (in which case the amount of flow into will be ), or not (in which case it'll be ). If , an additional flow of will also always be added. We can explore all possible decisions regarding how to distribute pipe upgrades amongst 's children using secondary DP, letting be the maximum flow from the first children with pipe upgrades. Letting be the number of children that cistern has, we can then copy over the results into the primary DP, with (for ).
The secondary DP takes time to compute for each cistern . Note that the sum of all for all is equal to , since every cistern (except the root) is the child of one other cistern, so this DP (and the whole solution) will take a total of time.
Comments