链接

题意:n个充电元件形成一棵树,每个点和每条边都有各自的充电概率,元件可以自身充电或者通过其他点和边间接充电,求充电状态元件的期望个数

题解

设1为根节点

设 \(f[x]\) 表示 \(x\) 不从以 \(x\) 为根的子树中充电的概率 ,前提自己不充电,再乘上儿子不充电或者边不充电的概率,因此有

\[f[x]=(1-w[x])\prod(1-(1-f[y])\times w(x,y))
\]

这样进行第一次DP

再设 \(g[x]\) 表示 \(x\) 不充电的概率,他的前提是 \(f[x]\) 并且不从父亲上面充电。

如果从父亲上面充电,前提是父亲从父亲的父亲充电并且边也充电,用1减去这个概率就是不从父亲充电的概率

\[g[y]=f[y]\times(1-w(x,y)\times(1-\frac{g[x]}{1-(1-f[y])\times w(x,y)}))
\]

据说这东西叫换根DP,反正就是两遍DP就是了

#include<bits/stdc++.h>
#define REP(i,a,b) for(int i(a);i<=(b);++i)
using namespace std;
typedef long long ll;
inline int read(){char c;int w;
while(!isdigit(c=getchar()));w=c&15;
while(isdigit(c=getchar()))w=w*10+(c&15);return w;
}
template<typename T,typename U>inline char smax(T&x,const U&y){return x<y?x=y,1:0;}
template<typename T,typename U>inline char smin(T&x,const U&y){return x>y?x=y,1:0;}
const int n=read(),N=5e5+5;
int head[N],tot;double w[N],f[N],g[N],ans;
struct node{int v,nxt;double w;}e[N<<1];
inline void add(int x,int y,double z){e[++tot].v=y,e[tot].w=z,e[tot].nxt=head[x];head[x]=tot;}
void go(int x,int fa){
f[x]=1-w[x];
for(int i=head[x];i;i=e[i].nxt){
const int&y=e[i].v;
if(y!=fa){
go(y,x);
f[x]*=1-(1-f[y])*e[i].w;
}
}
}
void dfs(int x,int fa){
ans+=1-g[x];
for(int i=head[x];i;i=e[i].nxt){
const int&y=e[i].v;
if(y!=fa){
if((1-(1-f[y])*e[i].w)>1e-8)g[y]=f[y]*(1-(1-g[x]/(1-(1-f[y])*e[i].w))*e[i].w);
else g[y]=f[y];
dfs(y,x);
}
}
}
int main(){
REP(i,2,n){
int x=read(),y=read();double z=read()/100.;
add(x,y,z),add(y,x,z);
}
REP(i,1,n)w[i]=read()/100.;ans=0;
go(1,0);g[1]=f[1];dfs(1,0);printf("%f\n",ans);
return 0;
}

[BZOJ3566][SHOI2014]概率充电器 换根树形DP的更多相关文章

  1. BZOJ3566 SHOI2014 概率充电器 【概率DP】

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

  2. BZOJ2591/LG3047 「USACO12FEB」Nearby Cows 换根树形DP

    问题描述 BZOJ2591 LG3047 题解 换根树形DP. 设 \(opt[i][j]\) 代表 当 \(1\) 为根时,\(i\) 为根的子树中,到 \(i\) 的距离为 \(j\) 的权值和 ...

  3. BZOJ3566: [SHOI2014]概率充电器 树形+概率dp

    3566: [SHOI2014]概率充电器 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 1888  Solved: 857[Submit][Stat ...

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

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

  5. BZOJ3566:[SHOI2014]概率充电器(树形DP,概率期望)

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

  6. [BZOJ3566][SHOI2014]概率充电器(概率DP)

    题意:树上每个点有概率有电,每条边有概率导电,求每个点能被通到电的概率. 较为套路但不好想的概率DP. 树形DP肯定先只考虑子树,自然的想法是f[i]表示i在只考虑i子树时,能有电的概率,但发现无法转 ...

  7. Codeforces Round #527 (Div. 3) F. Tree with Maximum Cost 【DFS换根 || 树形dp】

    传送门:http://codeforces.com/contest/1092/problem/F F. Tree with Maximum Cost time limit per test 2 sec ...

  8. POJ3585:Accumulation Degree(换根树形dp)

    Accumulation Degree Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3425   Accepted: 85 ...

  9. 2018.08.31 bzoj3566: [SHOI2014]概率充电器(概率dp+容斥原理)

    传送门 概率dp好题啊. 用f[i]" role="presentation" style="position: relative;">f[i] ...

随机推荐

  1. Kali linux 2016.2(Rolling)中metasploit的端口扫描

    目前常见的端口扫描技术一般有如下几类: TCP  Connect.TCP SYN.TCP ACK.TCP FIN. Metasploit中的端口扫描器 Metasploit的辅助模块中提供了几款实用的 ...

  2. [LNOI2014]LCA 树链剖分 离线 前缀和 思维题

    题目描述:给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先. 有q次询问,每 ...

  3. 前端之HTTP协议

    HTTP协议简介 作为学习前端开发的开始,我们必须搞明白以下几件事 1.什么是互联网      互联网=物理连接介质+互联网协议     2.互联网建立的目的? 数据传输打破地域限制,否则的话,我想获 ...

  4. 解决HMC在IE浏览器无法登录的问题(Java Applet的使用问题)

    管理IBM的小型机必须要用到HMC(Hardware Management Console),有时候在使用测试环境使用的时候我们会把HMC装到自己电脑上的虚拟机里面,然后管理小型机,但是在虚拟机里面使 ...

  5. unity 5.6.1 Oculus手柄输入问题

    unity文档中提到 轴的 ID 是5和6,但是测试后发现,ID是6和7,很坑 void Update () { if (Input.GetKeyDown(KeyCode.JoystickButton ...

  6. linux学习之多高并发服务器篇(三)

    UDP多播服务器 多播 组播组可以是永久的也可以是临时的.组播组地址中,有一部分由官方分配的,称为永久组播组.永久组播组保持不变的是它的ip地址,组中的成员构成可以发 生变化.永久组播组中成员的数量都 ...

  7. 统计 MapReduce 输出路径修改。

    先在上一篇MR 的104 行加入代码.jobConf.setOutputFormat(MyMultipleFilesTextOutputFormat.class); 用意是自定义 job 的输出格式: ...

  8. Android Studio获取开发版SHA1值和发布版SHA1值,详细过程

    转自原文 Android Studio获取开发版SHA1值和发布版SHA1值的史上最详细方法 前言: 今天我想把百度地图的定位集成到项目中来,想写个小小的案例,实现一下,但在集成百度地图时首先要申请秘 ...

  9. Runtime类中的freeMemory,totalMemory,maxMemory等几个方法

    最近在网上看到一些人讨论到Java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些题目,很多人感到很迷惑,为什么,在jav ...

  10. how to backup and restore database of SQL Server

    Back up 1,右键选中需要备份的数据库,Tasks-->Backup 2.General中,Destination,先remove掉之前的,然后再Add 需要注意的是,add的文件,必须要 ...