概率充电器

换根DP好题

f[i]表示只考虑i及其子树的时候,i通电的概率

f[i]=qi+(1qi)(1v(f[v](1p(v,i))+1f[v]))

化简为

f[i]=qi+(1qi)(1v(1f[v]p(v,i)))

其中vi的儿子,p(v,i)表示这条边的概率

解释一下:分两种情况,

i自己亮了,那么样本空间剩下的边和点随便是什么状态都可以

i自己没亮,那么必须要至少有一个儿子亮了且这条边一定能够通电。我们考虑这种情况的反面,对任意一个儿子v,它不亮的概率是1f[v],亮了但是边不通电的概率是f[v](1p(v,i)),两者加起来即可。再将上述结果累乘就是反面的概率

我们再设g[i]表示i的父亲fa在不考虑i及其子树的情况下通电的情况,dfa表示fa的父亲

g[i]=qfa+(1qfa)(1(1g[fa]p(fa,dfa))vi(1f[v]p(fa,v)))

,其中vfa的儿子

情况讨论是类似的,想一下这个公式怎么来的

注意求fg的过程中,我们是用整体的累积除以某一个概率来优化的,但是这个概率是可能为0的,一定要加以判断

然后设ans[i]表示i通电的概率,有

ans[i]=f[i]+(1f[i])p(i,fa)g[i]

,其中fai的父亲

解释一下:最终i通电要么是由于子树的原因,要么子树没有能够供电,然后父亲来供电

然后可以看一下这篇题解

注意这篇题解,设置的状态就是没有通电,这样其实跟我们上面的推导本质是一样的,但是肯定更加简洁。所以以后遇到考虑反面的情况,不妨直接按照反面设置状态

然后还要特别注意一个点,这篇题解设DPii的父亲没有电传到i的概率,而不是父亲不考虑i这棵子树被通电的考虑,这两个是完全不同的

update 2024.5.4

其实最好理解的还是这种操作

将三种状态(x自身通电,x通过其子树通电,x通过其父亲通电)分开考虑

第一种不说了

第二种,设f[i]表示i通过其子树供电的概率,有f[i]=1usoni(1lu+lu(1qu)(1fu)),其中qu表示u自身通电的概率,lu表示(i,u)这条边的长度

第三种,设F[i]表示i通过其父亲供电的概率,有F[i]=li(qfa+(1qfa)(Ffa+(1Ffa)(1usonfaui(1lu+lu(1qu)(1fu)))))

最后的ans见代码就好了

因为每个样本点都要考虑整体嘛,所以DP的时候也考虑整体

posted @   最爱丁珰  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示