3566: [SHOI2014]概率充电器 概率与期望+树形DP
2016-02-24 21:14
465 查看
神题ORZ。
%%%18357
我们用fi,0来表示i的子树(含i)给i充不上电的概率,用fi,1表示i的父亲给i充不上电的概率。
用hi表示i对其父亲fa的贡献,所以有hi=fi,0+(1−fi,0)∗(1−p(fa−>i))
那么我们dfs一遍可以求出所有的fi,0。
fi,0=(1−qi)∗∏hson
fi,1怎么求呢,我们考虑再一遍dfs,这一次由父亲向儿子转移。
令t=hson<eps?0:fx,1∗fx,0hson,即x给son充不上电的概率,注意fx,0hson是要除去hson本身对x的贡献。那么有fson,1=t+(1−t)∗(1−p(son−>fa))
ans=∑1−fi,0∗fi,1
%%%18357
我们用fi,0来表示i的子树(含i)给i充不上电的概率,用fi,1表示i的父亲给i充不上电的概率。
用hi表示i对其父亲fa的贡献,所以有hi=fi,0+(1−fi,0)∗(1−p(fa−>i))
那么我们dfs一遍可以求出所有的fi,0。
fi,0=(1−qi)∗∏hson
fi,1怎么求呢,我们考虑再一遍dfs,这一次由父亲向儿子转移。
令t=hson<eps?0:fx,1∗fx,0hson,即x给son充不上电的概率,注意fx,0hson是要除去hson本身对x的贡献。那么有fson,1=t+(1−t)∗(1−p(son−>fa))
ans=∑1−fi,0∗fi,1
#include<iostream> #include<cstdio> #define N 500005 using namespace std; int n,cnt; int head ; int list[N<<1],next[N<<1]; double key[N<<1]; double f [2]; double h ; inline int read() { int a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f; } inline void insert(int x,int y,double z) { next[++cnt]=head[x]; head[x]=cnt; list[cnt]=y; key[cnt]=z; } void dfs(int x,int fa) { for (int i=head[x];i;i=next[i]) if (list[i]!=fa) { dfs(list[i],x); h[list[i]]=f[list[i]][0]+(1-f[list[i]][0])*(1-key[i]); f[x][0]*=h[list[i]]; } } void dfs1(int x,int fa) { for (int i=head[x];i;i=next[i]) if (list[i]!=fa) { double t=h[list[i]]<1e-6?0:f[x][1]*f[x][0]/h[list[i]]; f[list[i]][1]=t+(1-t)*(1-key[i]); dfs1(list[i],x); } } int main() { n=read(); for (int i=1;i<n;i++) { int u=read(),v=read(),w=read(); insert(u,v,w/100.0); insert(v,u,w/100.0); } for (int i=1;i<=n;i++) { int x=read(); f[i][0]=1-x/100.0; } dfs(1,0); f[1][1]=1; dfs1(1,0); double ans=0; for (int i=1;i<=n;i++) ans+=1-f[i][0]*f[i][1]; printf("%.6lf",ans); return 0; }
相关文章推荐
- 继承,装饰者模式和动态代理之间的区别
- HDOJ-1434幸福列车
- 《JAVA编程思想》日志(一)------对象导论
- 10个精妙的Java编码最佳实践
- SAE 环境 django 配置
- POJ2955 Brackets(区间DP)
- 328. Odd Even Linked List
- MatLab归一化说明
- 优惠券数据分析-卡券宝
- matlab strel函数用法
- ApplePay简单测试(一)
- the inferior stopped because it triggered an exception
- ViewAnimation帧动画示例
- 算法分析之马走日字
- Javascript中的String
- Codeforces Round #304 (Div. 2)E. Soldier and Traveling 网络流
- HDU 3555——Bomb
- 下一代智能终端长什么样,车萝卜想从车载终端入手
- Live555源代码解读(4)下
- RPi 2B GPIO 测试