星球大战

11 篇文章 0 订阅
4 篇文章 0 订阅

星球大战
有一棵树。每次可以攻击树上的某棵子树,然后这棵子树上的每条边有 1 2 \frac{1}{2} 21的概率消失。定义 若攻击以x为根的子树,深度ht(x)为x子树剩余点(与x连通)的最大深度。共q次操作,两种: 1 x.新建一个节点,其父节点为x。2 x.询问若攻击以x为根的子树,x子树的期望深度。 q ≤ 5 × 1 0 5 q\leq 5\times10^5 q5×105

设dp[i][j]为以i为根的子树,深度<=j的概率.

a n s = ∑ d e p = 1 m a x h d e p × ( d p [ x ] [ d e p ] − d p [ x ] [ d e p − 1 ] ) ans=\sum_{dep=1}^{max_h}dep\times(dp[x][dep]-dp[x][dep-1]) ans=dep=1maxhdep×(dp[x][dep]dp[x][dep1])

转移方程: d p [ x ] [ d e p ] = Π y ∈ s o n ( x ) ( 1 2 + 1 2 d p [ y ] [ d e p − 1 ] ) dp[x][dep]=\Pi_{y\in son(x)}(\frac{1}{2}+\frac{1}{2}dp[y][dep-1]) dp[x][dep]=Πyson(x)(21+21dp[y][dep1])

其中第一个 1 2 \frac{1}{2} 21是x->y的边断掉的概率

1 2 d p [ y ] [ d e p − 1 ] \frac{1}{2}dp[y][dep-1] 21dp[y][dep1]是x->y没有断掉的概率乘以y节点深度<=dep-1的概率.

对于每次加点,先除以修改前的 1 2 + 1 2 d p [ y ] [ d e p − 1 ] \frac{1}{2}+\frac{1}{2}dp[y][dep-1] 21+21dp[y][dep1],再乘以修改后的 1 2 + 1 2 d p [ y ] [ d e p − 1 ] \frac{1}{2}+\frac{1}{2}dp[y][dep-1] 21+21dp[y][dep1]

for(int dep=0;dep<65;++dep)p[id][dep]=1;
while(q--){
    read(op,x);
    if(op==1){
        fa[++id]=x;
        for(int dep=0;dep<65;++dep)p[id][dep]=1;
        double pre=p[x][0];
        p[x][0]*=0.5;
        double now=p[x][0];
        for(int dep=1;(x=fa[x])>0&&dep<65;++dep){
            double tmp=p[x][dep];
            p[x][dep]/=1+pre;//x子儿子y修改前的值
            p[x][dep]*=1+now;//x子儿子y修改后的值
            pre=tmp,now=p[x][dep];
        }
    }else{
        double ans=0;
        for(int dep=1;dep<65;++dep)
            ans+=(double)dep*(p[x][dep]-p[x][dep-1]);
        printf("%.10f\n",ans);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值