【省选模拟】20/06/15

AA

  • 线段树维护同色集合最远点,再用一棵线段树维护颜色区间集合最远点,复杂度 O(nlogn)O(n\log n)CodeCode

BB

  • 考虑一个点的 SGSG 的值是其子树深度最大值,我们需要动态维护深度最大值
    将直径中点作为根,将一个点定为根相当于将其到根的路径上的点的值改为到直径的某个端点的距离
    相当于一个点有两个权值,需要区间切换为另一种,用线段树维护即可,CodeCode

CC

  • 神仙 DPDP
  • 注意到若要将 ii 运走,ii 之前的一定全部运走,考虑设计状态 dpi,jdp_{i,j} 表示到 ii,过了 jj 小时,花费的最小代价,同时注意到处理 ii 的时候,前 i1i-1 个点可能的权值只可能是 ai+bika_i+b_i*kbikb_i*k
    记录 dpi,j,zdp_{i,j,z} 表示上述两种状态,同时发现需要设计 gi,j,zg_{i,j,z} 表示在 j:31j:31 分时,前 i1i-1 个点均为 00 的最小花费,考虑转移
    当当前点没有爆时,可以直接从 fi1,j,zf_{i-1,j,z} 转移,同时 gi,j,z=Sai1z+Sbi1jkg_{i,j,z}=\lceil\frac{Sa_{i-1}*z+Sb_{i-1}*j}{k}\rceil
    枚举 ii 之前最后一次被经过的时间 rr
    首先需要花费 gi,r,zg_{i,r,z} 的费用将其清零
    然后我们可以通过若干次操作将 ii 减小使得它可以渡过剩余的 jrj-r 小时,次数的下界是
    Sai1z+Sbi1rgi,r,zk+(jr)bik\lceil\frac{Sa_{i-1}*z+Sb_{i-1}*r-g_{i,r,z}*k+(j-r)*b_i}{k}\rceil
    接着需要花费 dpi1,jr,0dp_{i-1,j-r,0} 次使前面的点渡过 jj 个小时
    同时 gi,j,z=gi,r,z+Sai1z+Sbi1rgi,r,zk+(jr)bik+Sbi1(jr)kg_{i,j,z}=g_{i,r,z}+\lceil\frac{Sa_{i-1}*z+Sb_{i-1}*r-g_{i,r,z}*k+(j-r)*b_i}{k}\rceil+\lceil \frac{Sb_{i-1}*(j-r)}{k} \rceilCodeCode
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章