【题解】P5298 [PKUWC2018]Minimax

P5298 [PKUWC2018]Minimax

思路

线段树合并优化树形 dp.

值域 1e9 首先考虑离散化。然后发现需要维护每种权值的出现概率,于是可以考虑到一个简单的树形 dp:

f[i][j] 为结点 i 出现第 j 大的权值的概率,分类讨论:

  1. 该结点为叶结点
    令该结点的权值出现概率为 1

  2. 该结点只有一个子结点
    直接继承子结点的概率

  3. 该结点有两个子结点
    f[i][j]=f[l][j][pik=1j1f[r][k]+(1pi)k=j+1mf[r][k]]+f[r][j][pik=1j1f[l][k]+(1pi)k=j+1mf[l][k] ]

注意到第三种情况相当于:对于每个结点,在值域上求前缀和 / 后缀和,可以用一棵线段树直接维护。

这个 dp 实际上对于每个结点维护整个值域的所有信息,也就是对于每个结点都维护值域中每个权值的出现概率,于是可以考虑线段树合并优化。

具体地,观察转移方程。发现对于一个权值,实际上相当于在原本的概率基础上乘上一个系数,这个系数是子结点值域左右两侧的概率区间和。这个和可以在线段树合并递归的时候直接维护:

于是直接上线段树合并就做完了。

时间复杂度约为 O(nlogn)

代码

posted @   kymru  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示
主题色彩