题目链接

CF643E. Bear and Destroying Subtrees

题解

dp[i][j]表示以i为根的子树中,树高小于等于j的概率

转移就是dp[i][j] = 0.5 + 0.5 (dp[i][j-1]) 首先是边不连的概率,其次是<=dp[son][j -1]的

然后我zz了

对于新增一个点,对于父亲的深度影响只有该节点的深度+1,除掉旧的乘上新的就OK,我全更新了一遍...,写出了奇怪的bug...

对于新点,只需要向上更新60次就好了,因为\(\frac{1}{2^60}\)已经足够小了

代码

#include<cstdio>
#include<algorithm>
#include<vector>
//#define int long long
using namespace std;
const int maxn = 5 * 1e5 + 10, h = 60;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int T, Q, fa[maxn], node;
double f[maxn][61];
main() {
Q = read(); node = 1;
for(int i = 0;i < h;++ i) f[node][i] = 1.0;
while(Q--) {
int opt = read(), x = read();
if(opt == 1) {
fa[++ node] = x;
for(int i = 0; i < h; i++) f[node][i] = 1;
double pre = f[x][0], now;
f[x][0] *= 0.5;
for(int i = 1; i < h && x; i++, x = fa[x]) {
now = f[fa[x]][i];
f[fa[x]][i] /= 0.5 + 0.5 * pre;
f[fa[x]][i] *= 0.5 + 0.5 * f[x][i - 1];
pre = now;
}
} else if(opt == 2) {
double ans = 0;
for(int i = 0; i < h; i++) ans += i * (f[x][i] - f[x][i - 1]);
printf("%.10lf\n", ans);
}
}
return 0;
}

CF643E. Bear and Destroying Subtrees 期望dp的更多相关文章

  1. [CF643E]Bear and Destroying Subtrees(期望,忽略误差)

    Description: ​ 给你一棵初始只有根为1的树 ​ 两种操作 ​ 1 x 表示加入一个新点以 x为父亲 ​ 2 x 表示以 x 为根的子树期望最深深度 ​ 每条边都有 \(\frac{1}{ ...

  2. 笔记-CF643E Bear and Destroying Subtrees

    CF643E Bear and Destroying Subtrees 设 \(f_{i,j}\) 表示节点 \(i\) 的子树深度为 \(\le j\) 的概率,\(ch_i\) 表示 \(i\) ...

  3. CF643E Bear and Destroying Subtrees

    题解 我们可以先写出\(dp\)式来. 设\(dp[u][i]\)表示以\(u\)为根的子树深度不超过\(i-1\)的概率 \(dp[u][i]=\prod (dp[v][i-1]+1)*\frac{ ...

  4. CF 643 E. Bear and Destroying Subtrees

    E. Bear and Destroying Subtrees http://codeforces.com/problemset/problem/643/E 题意: Q个操作. 加点,在原来的树上加一 ...

  5. Codeforces.643E.Bear and Destroying Subtrees(DP 期望)

    题目链接 \(Description\) 有一棵树.Limak可以攻击树上的某棵子树,然后这棵子树上的每条边有\(\frac{1}{2}\)的概率消失.定义 若攻击以\(x\)为根的子树,高度\(ht ...

  6. [cf674E]Bear and Destroying Subtrees

    令$f_{i,j}$表示以$i$为根的子树中,深度小于等于$j$的概率,那么$ans_{i}=\sum_{j=1}^{dep}(f_{i,j}-f_{i,j-1})j$ 大约来估计一下$f_{i,j} ...

  7. 【BZOJ-1419】Red is good 概率期望DP

    1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Di ...

  8. [NOIP2016]换教室 D1 T3 Floyed+期望DP

    [NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...

  9. HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

    题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...

随机推荐

  1. 【转】PyDev Eclipse使用技巧说明

    PyDev Package Explorer 创建项目 在开展工作之前,需要创建一个新的项目.在 Eclipse 菜单栏中,选择 File > New > Project > Pyd ...

  2. 【转】Python之函数进阶

    [转]Python之函数进阶 本节内容 上一篇中介绍了Python中函数的定义.函数的调用.函数的参数以及变量的作用域等内容,现在来说下函数的一些高级特性: 递归函数 嵌套函数与闭包 匿名函数 高阶函 ...

  3. Getting started with machine learning in Python

    Getting started with machine learning in Python Machine learning is a field that uses algorithms to ...

  4. V4L2文档翻译(一)【转】

    转自:https://blog.csdn.net/airk000/article/details/23218903 相关资料 https://www.kernel.org/doc/Documentat ...

  5. Linux 进程中 Stop, Park, Freeze【转】

    转自:https://blog.csdn.net/yiyeguzhou100/article/details/53134743 http://kernel.meizu.com/linux-proces ...

  6. 如何交叉编译 linux kernel 内核

    Compilation We first need to move the config file by running cp arch/arm/configs/bcmrpi_cutdown_defc ...

  7. win7安装Ubuntu变双系统以及删除Ubuntu分区操作

    Window7系统基础上安装Ubuntu使构成双系统,整个过程如下: 1. 一块空闲磁盘分区准备. “我的电脑”右键 > 管理 > 磁盘管理 > 压缩(从有空余分区压缩)/删除(删除 ...

  8. html5学习第一天

    1.语义标签解决方案 <video></video> 属性: controls 显示控制栏 autoplay 自动播放 loop  设置循环播放 多媒体标签在网页中的兼容效果方 ...

  9. Ex 6_14 布料剪裁问题_第八次作业

    子问题定义: 定义p[i][j]为布料宽为i,高为j的最优产出,每次剪下一块布料,剩余布料最多形成三块矩阵面料.每次剪裁会有两种情况,水平切割布料,其次是将布料旋转90度后在切割布料. 递归关系: 初 ...

  10. jQuery .on() and .off() 命名空间

    jQuery .on() and .off() 命名空间 博客分类: 生活 前端开发   jQuery1.7开始,jQuery引入了全新的事件绑定机制,jQuery .on() 和 off() 两个函 ...