Description

给定一棵\(N(N\leq 5\times 10^5)\)个节点的树。每个点有概率被直接充电,每条边有概率导电。如果一个没有被直接充电的点通过一条导电的边连接到了某个被充电的点,那么这个点也会被充电。问期望充电的点的个数。

Solution

由期望线性性,我们可以求出每个点被充电的概率,最后求和即可。

节点\(i\)通电有三种可能

  1. 它自己来电
  2. 它子树里有一个来电传了过来
  3. 子树外有一个来电传了过来

可以两遍\(dfs\)做,第一遍先求出第一种和第二种的概率,再换根\(dfs\)加上第三种的概率就行了。这是最开始的\(naive\)想法。

但是这些情况发生的概率不能直接加起来。考虑两个事件\(A,B\),发生的概率分别是\(P(A),P(B)\),那么至少发生一件的概率是\(P(A)+P(B)-P(A)*P(B)\)。

证明就是枚举三种情况:

  1. \(A\)发生\(B\)不发生,概率为\(P(A)*(1-P(B))\)
  2. \(A\)不发生\(B\)发生,概率为\((1-P(A))*P(B)\)
  3. \(A,B\)都发生,概率为\(P(A)*P(B)\)

三种情况求和就是\(P(A)+P(B)-P(A)*P(B)\)了。

知道了这个做两遍\(dfs\)就行了刚做过一个差不多的

啊Typora代码框里的字体好好看啊谁知道这是什么字体啊求告知QAQ

Code

#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<cctype>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using std::min;
using std::max;
using std::swap;
using std::vector;
const int N=500005;
typedef double db;
typedef long long ll;
#define pb(A) push_back(A)
#define pii std::pair<int,int>
#define all(A) A.begin(),A.end()
#define mp(A,B) std::make_pair(A,B)db f[N],p[N];
int n,cnt,head[N];struct Edge{int to,nxt;db dis;
}edge[N<<1];void add(int x,int y,db z){edge[++cnt].to=y;edge[cnt].nxt=head[x];edge[cnt].dis=z;head[x]=cnt;
}int getint(){int X=0,w=0;char ch=0;while(!isdigit(ch))w|=ch=='-',ch=getchar();while( isdigit(ch))X=X*10+ch-48,ch=getchar();if(w) return -X;return X;
}void dfs(int now,int fa){f[now]=p[now];for(int i=head[now];i;i=edge[i].nxt){int to=edge[i].to;if(to==fa) continue;dfs(to,now);f[now]=f[now]+f[to]*edge[i].dis-f[now]*f[to]*edge[i].dis;}
}void dfs(int now,int fa,db dis){if(f[now]*dis!=1){db x=(f[fa]-f[now]*dis)/(1-f[now]*dis);f[now]=f[now]+x*dis-f[now]*x*dis;} else f[now]=1;for(int i=head[now];i;i=edge[i].nxt){int to=edge[i].to;if(to==fa) continue;dfs(to,now,edge[i].dis);}
}signed main(){n=getint();for(int i=1;i<n;i++){int x=getint(),y=getint(),z=getint();add(x,y,0.01*z),add(y,x,0.01*z);}for(int i=1;i<=n;i++) p[i]=0.01*getint();dfs(1,0);for(int i=head[1];i;i=edge[i].nxt)dfs(edge[i].to,1,edge[i].dis);db ans=0;for(int i=1;i<=n;i++) ans+=f[i];printf("%.6lf\n",ans);return 0;
}

转载于:https://www.cnblogs.com/YoungNeal/p/9858799.html

[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. JavaMelody开源系统性能监控
  2. python生成固定形状的词云图
  3. 无法为新的Android ActionBar支持找到Theme.AppCompat.Light
  4. android低功耗蓝牙连接失败_低功耗蓝牙 AoA定位系统为室内定位和资产跟踪 提供亚米级精度位置服务...
  5. 维沃手机有没有智能机器人_抢!抢!抢!到宏达手机广场抢价值399元智能学习机器人仅需39.9就可领取啦!...
  6. Java命令行界面(第3部分):jbock
  7. ios 设置属性的center_【从0到1的Stata图表学习1】图例设置
  8. .rpt文件内容读取java_python读取PDF指定表格内容批量文件重命名
  9. CentOS6.5 linux 逻辑卷管理 调整分区大小:/dev/mapper/VolGroup-lv_root 50G 47G 16M 100%
  10. wps如何自己制作流程图_WPS如何绘制流程图? WPS绘图流程图详细教程
  11. ai画面怎么调大小_AI里面怎么改变文件的大小?
  12. 如何使用机器学习在一个非常小的数据集上做出预测
  13. neo4j数据可视化_我如何使用neo4j可视化来自半结构化数据的连接
  14. Spring前一次定时任务没执行完,下次任务是否会执行
  15. python圣斗士(十七):令人欲罢不能的正则
  16. html文件只能打印一页,javascript – 使用window.print()打印巨大的表只打印一页
  17. 苹果wifi测试中文软件,苹果测试排除WiFi网络故障工具 WiFi Check 2.1.2 Mac OS X
  18. 前端开发_HTML5_布局-栅格布局
  19. 华为手机百度云息屏后停止下载_大理石下载链接
  20. 记一次记忆深刻的springcloudgateway网关调优

热门文章

  1. javascript基础学习一
  2. mysql8建立表格报错
  3. 第一、第二、第三范式之间的理解和比较(转载)
  4. linux运行星际争霸1
  5. 如何一次性复制带有markdown/mathjax/latex的博客内容
  6. IntelliJ IDEA内存优化最佳实践(转)
  7. 语音识别(四)——DTW, Spectrogram, Cepstrum Analysis
  8. 深度学习(十七)——SSD, YOLOv2
  9. 将存储过程的结果插入表里
  10. top命令---Linux学习笔记