黑红树

Posted yanshannan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了黑红树相关的知识,希望对你有一定的参考价值。

https://zybuluo.com/ysner/note/1177020

题面

(zsy)发现黑红树具有一些独特的性质。

  • 这是二叉树,除根节点外每个节点都有红与黑之间的一种颜色。
  • 每个节点的两个儿子节点都被染成恰好一个红色一个黑色。
  • 这棵树你是望不到头的(树的深度可以到无限大)
  • 黑红树上的高度这样定义:[h_{根节点}=0,h_{son}=h_{fa}+1]

(zsy)想从树根顺着树往上爬。他有(frac{p}{q})的概率到达红色的儿子节点,有 (1-frac{p}{q})的概率到达黑色节点。
但是他知道如果自己经过的路径是不平衡的,他会马上摔下来。
一条红黑树上的链是不平衡的,当且仅当红色节点与黑色节点的个数之差大于(1)
现在他想知道(Q)次他刚好在高度为(h)的地方摔下来的概率的精确值 (frac{a}{b}),要求输出(a),(b)分别对(k)取模后的结果。

  • (nleq10^6,Qleq10^6,kleq10^9+7)(n)代表高度)

    解析

    (zsy)显然不可能在奇数层掉下来,因为他在偶数层时肯定红黑节点个数相等。
    看到奇数层(puts("0 0");)
    对于偶数,设(dp[i])表示在该层活着的概率。(哪像我还把颜色和红黑节点数量差作为状态)
    然后列(DP)转移方程
    [dp[i]=dp[i-2]*frac{p}{q}*frac{q-p}{q}*2]
    (肯定要经过一个红节点和一个黑节点,然后两者可以倒过来,则乘(2)
    于是第(i)层挂掉的概率为(dp[i-2]-dp[i])
    这玩意儿可以(O(n))预处理,然后(O(Q))答完询问,总复杂度为(O(n))
    (当然你要(O(Qlogn))在线快速幂我也拦不住)
    对于乘爆情况,先把(frac{2p(q-p)}{q^2})约分掉,保证计算过程中不用约分,就可以直接取模了。













以上是关于黑红树的主要内容,如果未能解决你的问题,请参考以下文章

黑红树

黑红树题解

NOIP模拟赛黑红树 期望概率dp

基础知识HashMap源码分析

C ++中的排名树

红黑树删除