考虑一个点被填满则他需要从其父亲得到\(q_u = \sum_{v = u\ or\ v \in son_u}m_v\)
那么考虑如何这样操作。
我当时world final做的时候,是从上往下遍历,此时有若干分数流下下方,然后就疯狂的wa。
那么我们考虑从下往上做,考虑如何从儿子调整到父亲。
我们发现如果儿子有 \(x\) 这样的流,那么其他每个儿子都有 \(\min {(x,q_u)}\)
那么其有父亲有\(\sum \min{(x,q_u)}\)流下来。
接下来是比较有关键的trick。
我们发现如果当时这个点需要\(x\)中,\(x > \max_{u\ is\ brother\ of\ now}{(q_u)}\)那么其往上父亲的需求量固定为 \(\sum q_u\)
否则我们发现其一定有一个或多个儿子往上的贡献为\(x\).
那么此时的\(x\)会翻倍或更大。
因为最大的答案一定是\(\sum all\)
那么这个一条链上会翻倍的情况最多只有\(log\)次。
那么我们倍增记录兄弟的最大值,\(\sum q_u\)。
即可 \(O(nlogn(logn + log(\sum all)))\)