Time Limit: 40 Sec Memory Limit: 256 MB
Submit: 1276 Solved: 558

Description

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

SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件。进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定。
随后电能可以从直接充电的元件经过通电的导线使得其他充电元件进行间接充电。
作为 SHOI 公司的忠实客户,你无法抑制自己购买 SHOI 产品的冲动。在排了一个星期的长队之后终于入手了最新型号的 SHOI 概率充电器。
你迫不及待地将 SHOI 概率充电器插入电源——这时你突然想知道,进入充电状态的元件个数的期望是多少呢?

Input

第一行一个整数:n。概率充电器的充电元件个数。充电元件由 1-n 编号。
之后的 n-1 行每行三个整数 a, b, p,描述了一根导线连接了编号为 a 和 b 的
充电元件,通电概率为 p%。
第 n+2 行 n 个整数:qi。表示 i 号元件直接充电的概率为 qi%。

Output

输出一行一个实数,为进入充电状态的元件个数的期望,四舍五入到六位小数

Sample Input

3

1 2 50

1 3 50

50 0 0

Sample Output

1.000000

HINT

对于 100%的数据,n≤500000,0≤p,qi≤100。

Source

By 佚名提供


这题好难啊…真的搞了好长时间才搞懂,网上题解貌似也都不是特别地清真,除了有两份还比较清晰的,以下是一份,如果我的看不懂可以去看这篇dalao讲解


首先我们定义几个东西

f[i] f[i]

表示由它的整个子树给他供不上电的概率(这个里面包括了自己不来电的情况,因为自己也算在自己所在的子树中,也包含了所有的孩子不给他供电的情况,利用乘法原理计算)

g[i] g[i]

表示由他的父亲不能给他供上电的概率

显然第 i i个点不被供电的概率是f[i]∗g[i]f[i]*g[i],也就是父亲不给他电,孩子不给他电,自己不来电

显然我们可以发现光是定义一个 f[i] f[i]和 g[i] g[i]不是很容易转移,两者之间貌似也没有太大的联系可以直接去转移,于是我们再定义一个数组 h[i] h[i]

h[i] h[i]

表示i点对其父亲充不上电的贡献,换句话说,表示i点不能给他父亲供电的概率

那么显然有

h[i]=f[i]+(1.0−f[i])∗(1.0−p)

h[i]=f[i]+(1.0-f[i])*(1.0-p)

其中 p p表示ii点到 i i点的父亲的边被通电的概率

则显然h[i]h[i]表示他不能给他父亲供电的概率等于他本来就没有电的概率加上他本来有电,但是到父亲的这根线不通电,于是乘以这根线不通电的概率

而对于叶节点,显然叶节点的 f f值就等于自己不来电的概率,hh值仍然满足这个式子

对 f[i] f[i]的求解,显然应该有

f[i]=(1.0−p[i])∗Πhv

f[i] = (1.0-p[i])*\Pi_{h_v}

这里的 p[i] p[i]表示 i i自来电的概率

那么最后一个问题是求解g[i]g[i],其实 g[i] g[i]的求解也不是很难,但是由于我菜,真的是理解了好长时间

我们对于 g[v] g[v]的求解,令 u u为他的父亲,则定义一个变量为tt

t=h[v]<eps?0:g[u]∗f[u]h[v]

t = h[v]
最后

g[v]=t+(1.0−t)∗(1.0−p)

g[v]=t+(1.0-t)*(1.0-p)
这里的 p p表示和父亲连的边的通电几率
我们先看前面这个,如果h[v]h[v]为 0 0的话,说明vv一定可以向 u u充电,什么意思呢?就是说vv一定有点,并且 v v到uu的线一定是百分之百流通的, 这种情况的话,我们最后对于这个 v v点,计算1−g[v]∗f[v]1-g[v]*f[v]的时候就会发现,虽然之后计算了一个 g[v] g[v],但是其实是没有作用的,不影响答案的,因为 f[v] f[v]必然等于 0 0,因此不会影响答案,对于第二种情况,如果h[v]h[v]有值,则计算 t t为g[u]∗f[u]h[v]g[u]*\frac{f[u]}{h[v]},其中的道理其实很简单,也就是现在父亲 u u不能由其父亲通电,不能自来电,不能由除了vv以外的孩子来电,则只能通过 v v来电,这这种情况就是不能给vv供电的概率,因为其他路全部封死了,没有电力来源,因此不能给 v v输送电力,直接不能送电力的几率加上可以送电力的几率乘以线不导电的概率就是我们的答案了
比如下面这幅图就表现了这种无法uu无法向 v v供电的情况,此时圈起来的部分都不向uu供电,包括 u <script type="math/tex" id="MathJax-Element-7982">u</script>自己也不来电


#include <cstdio>
#include <cstring>
#include <iostream>using namespace std;const int MAXN = 500000 + 10;
int head[MAXN], tail, fa[MAXN];
double f[MAXN], h[MAXN], g[MAXN];
struct Line{ int to, nxt; double p; }line[ MAXN * 2 ];void add_line( int from, int to, double p ) {line[++tail].nxt = head[from];head[from] = tail;line[tail].to = to;line[tail].p = p;
}
void dfs1( int u, int fat ) {fa[u] = fat;for( register int i = head[u]; i; i = line[i].nxt ) {int v = line[i].to;if( v == fat ) continue;dfs1( v, u );h[v] = f[v] + ( 1 - f[v] ) * ( 1.0 - line[i].p );f[u] *= h[v];}
}
void dfs2( int u, int fat ) {for( register int i = head[u]; i; i = line[i].nxt ) {int v = line[i].to;if( v == fat ) continue;double t = h[v] < 1e-6 ? 0 : g[u] * f[u] / h[v];g[v] = t + ( 1.0 - t ) * ( 1.0 - line[i].p );dfs2( v, u );}
}
int main( ) { int n;scanf( "%d", &n ); int ff, tt, pp;for( register int i = 1; i <= n - 1; i++ ) {scanf( "%d%d%d", &ff, &tt, &pp );add_line( ff, tt, pp / 100.0 );add_line( tt, ff, pp / 100.0 );}for( register int i = 1; i <= n; i++ ) { int tmp;scanf( "%d", &tmp );f[i] = 1.0 - tmp / 100.0;}dfs1( 1, 0 );g[1] = 1.0; dfs2( 1, 0 );double ans = 0.0;for( register int i = 1; i <= n; i++ ) ans += 1.0 - f[i] * g[i];printf( "%.6lf\n", ans );return 0;
}

BZOJ 3566: [SHOI2014]概率充电器 期望DP + 树形DP相关推荐

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

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

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

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

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

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

  4. [SHOI2014]概率充电器 dp

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

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

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

  6. Luogu 4284 [SHOI2014]概率充电器

    BZOJ 3566 树形$dp$ + 概率期望. 每一个点的贡献都是$1$,在本题中期望就等于概率. 发现每一个点要通电会在下面三件事中至少发生一件: 1.它自己通电了. 2.它的父亲给它通电了. 3 ...

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

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

  8. 题解 [SHOI2014]概率充电器

    前情提要:最近大佬们都在写题解,只有我在咕咕咕.QAQ:明明我都把flag写出来辣,dalao们没看见,然后就被嘲讽了,QAQ 洛谷 树形DP+期望(讲了两次,菜鸡的我才做QAQ) 首先,每个充电元件 ...

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

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

最新文章

  1. Android Service 全解析
  2. 产线数字化软件源码_品质笔记⑥丨卢宇聪:把握数字化趋势,坚定创新发展道路...
  3. 搜索 —— 广搜的优化技巧
  4. 后续:为LAMP添加XCache加速。
  5. python数组类型_一文搞懂Python中的所有数组数据类型
  6. 成绩记录薄系统C语言,成绩记录簿C语言版.doc
  7. 微信小程序订阅消息:用云服务编写订阅消息超详细描述
  8. C语言自学——lesson4
  9. 中维报警邮件服务器,中维世纪视频集中管理系统JVMS 6200
  10. qwidget美化_Qt美化界面的心得整理
  11. 2345看图王 v10.4.0.9292 去广告绿色纯净版
  12. 转:我通过微软亚洲研究院面试的经历
  13. linux硬盘速度测试方法
  14. maf相关代码和命令
  15. 为什么 MySQL 不建议执行超过 3 表以上的多表关联查询?
  16. 常用桌面端软件开发语言整理
  17. 洛阳中考实验计算机分数,2018洛阳中考科目及分值
  18. 10个一般人不知道的小众网站,个个堪称神器,让你大开眼界
  19. matlab axis坐标轴相关设置详解
  20. 下级对上级回复已阅知_阅示、阅知、阅悉之间有什么区别

热门文章

  1. Java中重载的作用?
  2. Cloudera的CDH和Apache的Hadoop的区别
  3. 图神经网络GNN(三):基于图神经网络的节点表征学习
  4. win10访问服务器文件夹慢,Win10专业版系统打开文件夹很慢的解决方法 - Win10专业版官网...
  5. 携手 诺基亚N78 共同参与 连城诀
  6. 图片合并成PDF,两个PDF的合并
  7. element-ui+mongodb+express项目的实现(含源代码)
  8. 在 TIME_WAIT 状态的 TCP 连接,收到 SYN 后会发生什么?
  9. 淘宝天猫商家运营,淘宝店铺和实体店有什么不同,网店购物的优劣势
  10. echarts 调色盘、渐变色