BZOJ 3566

树形$dp$ + 概率期望。

每一个点的贡献都是$1$,在本题中期望就等于概率。

发现每一个点要通电会在下面三件事中至少发生一件:

1、它自己通电了。

2、它的父亲给它通电了。

3、它的儿子给它通电了。

那么我们设$f_i$表示它的父亲给它通电的概率,$g_i$表示它的子树中给它通电的概率,那么最后的答案$\sum_{i = 1}^{n}f_i + g_i - f_i * g_i = \sum_{i = 1}^{n}1 - (1 - f_i) * (1 - g_i)$。

感觉好麻烦,直接把$f_i$和$g_i$设成不通电的概率好了。

先考虑计算$g$。

假设每个点$i$自己通电的概率是$a_i$,一条连接着$x$和$y$的边通电的概率是$val(x, y)$,那么$g_x = (1 - a_x)\prod_{y \in son(x)}(g_y + (1 - g_y) * (1 - val(x, y)))$。

因为如果一个点不从自己的子树中得到电,那么它自己一定没有电,然后对于每一个儿子,要么不通电,要么通了电但是这条边是不通电的,电量传递不上来。

然后考虑计算$f$,对于一对父子关系的点$(x, y)$,我们发现要么$x$不带电,要么$x$带了电但是这条边传递不过来,那么$x$不带电的概率$P = \frac{f_x * g_x}{g_y + (1 - g_y) * (1 - val(x, y))}$,

这时候我们默认$y$是不带电的,但是我们在计算$g_x$的时候多算了$y$的贡献,所以要除掉,然后$f_y = P + (1 - P) * (1 - val(x, y))$。

时间复杂度$O(n)$。

Code:

#include <cstdio>
#include <cstring>
using namespace std;
typedef double db;const int N = 5e5 + 5;int n, tot = 0, head[N];
db a[N], f[N], g[N];struct Edge {int to, nxt;db val;
} e[N << 1];inline void add(int from, int to, db val) {e[++tot].to = to;e[tot].val = val;e[tot].nxt = head[from];head[from] = tot;
}inline void read(int &X) {X = 0; char ch = 0; int op = 1;for(; ch > '9' || ch < '0'; ch = getchar())if(ch == '-') op = -1;for(; ch >= '0' && ch <= '9'; ch = getchar())X = (X << 3) + (X << 1) + ch - 48;X *= op;
}void dfs1(int x, int fat) {g[x] = 1 - a[x];for(int i = head[x]; i; i = e[i].nxt) {int y = e[i].to;if(y == fat) continue;dfs1(y, x);g[x] *= (g[y] + (1 - g[y]) * (1 - e[i].val));}
}void dfs2(int x, int fat, int inEdge) {if(!fat) f[x] = 1.0;else {db p = g[fat] * f[fat] / (g[x] + (1 - g[x]) * (1 - e[inEdge].val));f[x] = p + (1 - p) * (1 - e[inEdge].val);}for(int i = head[x]; i; i = e[i].nxt) {int y = e[i].to;if(y == fat) continue;dfs2(y, x, i);}
}int main() {
//    freopen("2.in", "r", stdin);
    read(n);for(int x, y, v, i = 1; i < n; i++) {read(x), read(y), read(v);db val = 1.0 * v / 100.0;add(x, y, val), add(y, x, val);}for(int i = 1; i <= n; i++) {int v; read(v);a[i] = 1.0 * v / 100.0;}dfs1(1, 0);dfs2(1, 0, 0);/*    for(int i = 1; i <= n; i++)printf("%f ", f[i]);printf("\n");for(int i = 1; i <= n; i++)printf("%f ", g[i]);printf("\n");    */db ans = 0;for(int i = 1; i <= n; i++)ans += (1 - g[i] * f[i]);printf("%.6f\n", ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/CzxingcHen/p/9875864.html

Luogu 4284 [SHOI2014]概率充电器相关推荐

  1. 洛谷 P4284 [SHOI2014]概率充电器 解题报告

    P4284 [SHOI2014]概率充电器 题目描述 著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  2. BZOJ3566 [SHOI2014]概率充电器 (树形DP概率DP)

    3566: [SHOI2014]概率充电器 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: "采用全新纳米级加工技术,实现元件与 ...

  3. [SHOI2014]概率充电器 dp

    [SHOI2014]概率充电器 时间限制: 4 Sec   内存限制: 256 MB 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: "采用全 ...

  4. 【BZOJ】3566: [SHOI2014]概率充电器

    [算法]树型DP+期望DP [题意]一棵树上每个点均有直接充电概率qi%,每条边有导电概率pi%,问期望有多少结点处于充电状态? [题解]引用自:[BZOJ3566][SHOI2014]概率充电器 树 ...

  5. [BZOJ3566][SHOI2014]概率充电器

    B. 概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI ...

  6. 和Leo一起做爱数学的好孩子之[SHOI2014]概率充电器

    著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决 定!SHOI 概率充电器,您生活不可或 ...

  7. BZOJ 3566: [SHOI2014]概率充电器 期望DP + 树形DP

    Time Limit: 40 Sec Memory Limit: 256 MB Submit: 1276 Solved: 558 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世 ...

  8. BZOJ 3566: [SHOI2014]概率充电器

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3566 首先这题正着想不好想,考虑补集转化. 先dfs一遍,令f[u]=(1-p[u])*∏(1 ...

  9. BZOJ3566 SHOI2014概率充电器(动态规划+概率期望)

    设f[i]为i在子树内不与充电点连通的概率.则f[i]=(1-pi)·∏(1-qk+qk·f[k]). 然后从父亲更新答案.则f[i]=f[i]·(1-qfa+qfa*f[fa]/(1-qfa+qfa ...

最新文章

  1. android自定义控件 几种方式总结
  2. Loadrunner通过ssh连接linux进行hadoop基准测试
  3. 系统架构设计_分布式、服务化的ERP系统架构设计
  4. 老公年收入百万,却不愿拿出二十万帮我弟弟买房子,我该离婚吗?
  5. 计算机专业考研不想走编程,考研的这些弯路,不要走,好吗?
  6. 一年三番五次修,卡巴斯基为何依然无法完美修复杀毒软件中的这些洞 (技术详情)?...
  7. Android 屏幕旋转时保存状态
  8. 带你了解开课吧,Python培训的怎么样?
  9. 如何让Activiti-Explorer使用sql server数据库
  10. 基于Chrome插件的微博超话自动签到
  11. openssl 加盐_nodejs-md5加盐到解密比对
  12. python编写翻译器_用Python做一个简单的翻译工具
  13. 原材料涨价引发全LED显示屏全产业链价格上浮!
  14. Java实现图表趋势图的展现
  15. 建功核武的数学家周毓麟院士:采数学之美为吾美
  16. Git 工具之储藏与清理-7.3
  17. 电厂GPS北斗时钟同步(卫星时间同步系统)组成及配置
  18. 千锋Django学习笔记
  19. Fortigate 飞塔防火墙命令行常用操作 CLI
  20. 【总结】浏览器 User-Agent 大全

热门文章

  1. 优地机器人厂家_2019中国人工智能机器人企业TOP30榜单发布 优地科技跻身前十...
  2. 用node.js读写文件
  3. 二年级小学生四则运算30道题目
  4. 微信小程序运行报错---invoke event
  5. CCF - 201703-1 - 分蛋糕
  6. URAL1553 Caves and Tunnels 树链剖分 动态树
  7. Android一个自定义的进度环:ProgressChart
  8. 使用Office Word 2010/2013 发布文章到博客园
  9. Linux编程简介——VI
  10. 10个开源免费的电子商务平台(转自伯乐在线)