[SHOI2014]概率充电器 题解
注意到本题的贡献是不带权的,所以期望其实就是每个点的概率之和。
本题正着做好像不是很好做,要考虑 \(P(A+B)=P(A)+P(B)-P(A)P(B)\) 的容斥(因为这是两个条件至少满足一个,所以是求集合并的概率),具体可以看这个。
所以我们考虑反着做。设 \(f_u\) 表示 \(u\) 点没有通电的概率,那么有
\]
这个点先要自己不亮,然后周围的点要么边不导电,要么边导电但链接的那个不通电,注意到后面那个其实算的是 \(P(A)+P(A|B)\)。
发现有后效性,我们考虑换根 DP,重新设 \(f_u\) 表示只考虑在 \(u\) 的子树中的点使得 \(u\) 不亮的概率,于是刚才的式子变成了
\]
第一遍 DP 后根的答案已经正确了,考虑从 \(fa\) 推向 \(u\),设 \(g_u\) 是根为 \(u\) 时的答案。有
\]
注意要判断除数为 \(0\) 的情况,提供一组 hack 数据:
Input:
3
1 2 100
2 3 100
0 100 0
Output:
3.000000
#include <bits/stdc++.h>
using namespace std;
const int N=5e5+5;
struct Edge{int to,nxt;double w;}e[N*2];
int n,head[N],cntE;
double ans,p[N],f[N],g[N];
inline void add(int u,int v,double w) {e[++cntE]=(Edge){v,head[u],w},head[u]=cntE;}
void dfs1(int u,int fa)
{
f[u]=1-p[u];
for(int i=head[u],v;i;i=e[i].nxt)
if((v=e[i].to)!=fa)
dfs1(v,u),f[u]*=(1-e[i].w+e[i].w*f[v]);
}
void dfs2(int u,int fa)
{
ans+=1-g[u];
for(int i=head[u],v;i;i=e[i].nxt)
if((v=e[i].to)!=fa)
{
if(e[i].w+e[i].w*f[v]==1) g[v]=f[v];
else
{
double tmp=g[u]/(1-e[i].w+e[i].w*f[v]);
g[v]=f[v]*(1-e[i].w+e[i].w*tmp);
}
dfs2(v,u);
}
}
int main()
{
scanf("%d",&n);
for(int i=1,a,b;i<n;++i)
{
double c;
scanf("%d%d%lf",&a,&b,&c); c/=100;
add(a,b,c); add(b,a,c);
}
for(int i=1;i<=n;++i) scanf("%lf",p+i),p[i]/=100;
dfs1(1,0); g[1]=f[1]; dfs2(1,0);
printf("%.6f",ans);
return 0;
}
[SHOI2014]概率充电器 题解的更多相关文章
- BZOJ 3566: [SHOI2014]概率充电器 [树形DP 概率]
3566: [SHOI2014]概率充电器 题意:一棵树,每个点\(q[i]\)的概率直接充电,每条边\(p[i]\)的概率导电,电可以沿边传递使其他点间接充电.求进入充电状态的点期望个数 糖教题解传 ...
- BZOJ3566: [SHOI2014]概率充电器 树形+概率dp
3566: [SHOI2014]概率充电器 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 1888 Solved: 857[Submit][Stat ...
- 【BZOJ3566】[SHOI2014]概率充电器 期望+树形DP
[BZOJ3566][SHOI2014]概率充电器 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线 ...
- BZOJ3566 [SHOI2014]概率充电器 (树形DP&概率DP)
3566: [SHOI2014]概率充电器 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线能否通电 ...
- BZOJ 3566: [SHOI2014]概率充电器( 树形dp )
通过一次dfs求出dp(x)表示节点x考虑了x和x的子树都没成功充电的概率, dp(x) = (1-p[x])π(1 - (1-dp[son])*P(edge(x, son)).然后再dfs一次考虑节 ...
- 洛谷 P4284 [SHOI2014]概率充电器 解题报告
P4284 [SHOI2014]概率充电器 题目描述 著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完 ...
- P4284 [SHOI2014]概率充电器
P4284 [SHOI2014]概率充电器 今天上课讲到的题orz,第一次做这种上下搞两次dp的题. g[i]表示i的子树(包括i)不给i充电的概率. f[i]表示i的父亲不给i充电的概率. g[]可 ...
- 【BZOJ 3566】 3566: [SHOI2014]概率充电器 (概率树形DP)
3566: [SHOI2014]概率充电器 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线能否通电 ...
- BZOJ3566 SHOI2014 概率充电器 【概率DP】
BZOJ3566 SHOI2014 概率充电器 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器: “采用全新纳米级加工技术,实现元件与导线能 ...
随机推荐
- 教你三种jQuery框架实现元素显示及隐藏动画方式
摘要:在jQuery框架中对元素对象进行显示和隐藏有三种方式,分别是"默认方式显示和隐藏"."滑动方式显示和隐藏"."淡入淡出显示和隐藏". ...
- 从实力的角度出发来思考这道AOP题目
文/楠木大叔 技术更迭,一往无前.技术人总是要不断学习以适应社会的发展和行业对我们的要求.每隔一段时间,就会有纷至沓来的新技术,新知识,新概念,我们应该如何应对,是被逼到墙角,还是主动出击? 导读 从 ...
- pytest命令行参数
1.-v:可以输出用例更加详细的执行信息,如下图 C:\Users\cale\checkapi\test_cc>pytest test_m1.py -v ==================== ...
- LeNet-5网络搭建详解
LeNet-5是由Yann LeCun设计的用于手写数字识别和机器打印字符的卷积神经网络.她在1998年发表的论文<基于梯度学习的文本识别>中提出了该模型,并给出了对该模型网络架构的介绍. ...
- 【题解】ball 数论
题目 题目描述: 众所周知的是Dr.Bai 穷困潦倒负债累累,最近还因邦邦的出现被班上的男孩子们几乎打入冷宫,所以Dr.Bai 决定去打工赚钱. Dr.Bai 决定做玩♂球的工作,工作内容如下. 老板 ...
- 旁路电容的PCB布局布线透彻详解(4)
原文地址点击这里: 前面使用了较多的篇幅介绍旁路电容的工作原理及其选择依据,我们已经能够为电路系统中相应的数字集成芯片选择合适的旁路电容,在实际应用过程中,旁路电容的PCB布局布线也会影响到高频噪声旁 ...
- WEB安全新玩法 [5] 防范水平越权之查看他人订单信息
水平越权是指系统中的用户在未经授权的情况下,查看到另一个同级别用户所拥有的资源.水平越权会导致信息泄露,其产生原因是软件业务设计或编码上的缺陷.iFlow 业务安全加固平台可以缓解部分场景下的水平越权 ...
- 使用远程Docker进行集成测试
目录 需求背景 使用docker进行环境搭建 以中心化的docker server改进集成测试 Docker Server远程链接配置 Testcontainers 框架 Testcontainers ...
- 15 自动发布Java项目(Tomcat)
#!/bin/bash export PAHT=/usr/local/maven/bin:/usr/local/jdk/bin:/usr/local/sbin:/usr/local/bin:/usr/ ...
- 7.1、controller节点配置
0.配置openstack版本yum源: yum install centos-release-openstack-rocky 1.安装 OpenStack 客户端: yum install pyth ...