• bzoj5461 Minimax 题解


    https://www.lydsy.com/JudgeOnline/problem.php?id=5461

    看到题目,必将m种权值离散化。

    首先是一个显然的dp设计。

    设$f(i,j)$表示第i个节点,最终取值为j(已离散化)的概率。

    因为树上的节点儿子数不超过2,不妨设值k出现在左儿子上。

    则有$f(x,k)=f(ls,k)*(pmx_x*sum limits_{j=1}^{k-1}f(rs,j)+pmn_x*sum limits_{j=k+1}^{m}f(rs,j))$

    初态是$f(leaf,val[leaf])=1$,答案直接对$f(1)$统计即可。

    从实际含义上理解,正确性是显然的。

    所以dp前预处理前缀和,可以做到$O(n^2)$。

    因为树上情况比较特殊,加上保证只有不超过两个儿子,并不自然地想到了线段树合并。

    如果是叶子,插入权值为1的节点。

    否则进行两个儿子的线段树合并。

    在线段树合并的同时,维护两棵线段树当前子树的前缀后缀和。

    如果递归到其中一棵树为空,给另一棵树打上乘一个值的标记就可以了。

    最后$dfs(root[1])$统计答案。

    该题复杂度为$O(mlogn)$,

    证明:

    线段树合并复杂度等于$merge$函数调用次数。

    $merge$函数调用一次,除非遇到(线段树上的)叶子节点,必定销毁一个节点。

    并且,线段树是二叉树,

    也就是说遇到的(线段树上的)叶子节点个数不会多于销毁的节点个数。

    只在遇到(题中树上的)叶子节点时插入了$mlogn$个节点,故得证。

  • 相关阅读:
    EXCEL的下拉列表
    lambda表达式各种用法
    数组 list互转
    基于SpringBoot注解实现策略模式
    VRRP
    添加索引
    linux压缩解压命令
    vmware不可恢复错误:mks
    mysql修改重置密码
    mysql_5.7yum安装
  • 原文地址:https://www.cnblogs.com/skyh/p/11447964.html
Copyright © 2020-2023  润新知