CF1578J Just Kingdom

考虑一个点被填满则他需要从其父亲得到\(q_u = \sum_{v = u\ or\ v \in son_u}m_v\)

那么考虑如何这样操作。

我当时world final做的时候,是从上往下遍历,此时有若干分数流下下方,然后就疯狂的wa。

image

那么我们考虑从下往上做,考虑如何从儿子调整到父亲。

我们发现如果儿子有 \(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)))\)

原文地址:https://www.cnblogs.com/dixiao/p/15624962.html