题解:P12627 [ICPC 2025 NAC] Ornaments on a Tree
SunburstFan
·
·
题解
超级牛牛题。
首先考虑如果没有限制节点的重量,即对于 \forall i,都有 w_i=-1。
有一个贪心的策略显然是优的,考虑从叶子节点开始,父亲相同的节点中随机挑选一个使其值为 K,其余的等于 0,这样可以保证对于每一层,都能保证其吃满限制,肯定最优。
那么有重量限制怎么办呢?
我们可以让每个节点的限制变得不同,具体地,对于 w_u \neq -1,有 :
K_u=K_{old} -w_u;K_{fa(u)}=K_{fa(u),old} - w_u
注意上述公式中的 K 不是题目里给的,而是对于每个节点分别的限制。
我们保留原来从下往上递归的策略,对于每个节点,可以维护 sum_u 表示自己和自己儿子节点的总限制和,然后就会发现对于没有限制的节点 u,其最优的重量为:
w_{u,new}=\min(K-sum_u,K-sum_{fa(u)})
这个式子中的 K 即为题目给定的初始值。
跑两次 DFS 即可,时间复杂度 O(N)。
代码很好写,不放了。