码迷,mamicode.com
首页 > 其他好文 > 详细

黑红树

时间:2018-06-09 18:58:02      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:个数   复杂度   mys   uri   平衡   快速   情况   not   路径   

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\)取模后的结果。

  • \(n\leq10^6,Q\leq10^6,k\leq10^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}\)约分掉,保证计算过程中不用约分,就可以直接取模了。

黑红树

标签:个数   复杂度   mys   uri   平衡   快速   情况   not   路径   

原文地址:https://www.cnblogs.com/yanshannan/p/9160335.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!