zoukankan      html  css  js  c++  java
  • 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)))\)

  • 相关阅读:
    前端基础知识1
    mysql作业
    mysql了解知识点
    mysql3
    数据库作业2
    循环结构经典题型
    计算1
    猜数字游戏
    css的显示
    定位和position定位
  • 原文地址:https://www.cnblogs.com/dixiao/p/15624962.html
Copyright © 2011-2022 走看看