链接

题意: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就是了

  1. #include<bits/stdc++.h>
  2. #define REP(i,a,b) for(int i(a);i<=(b);++i)
  3. using namespace std;
  4. typedef long long ll;
  5. inline int read(){char c;int w;
  6. while(!isdigit(c=getchar()));w=c&15;
  7. while(isdigit(c=getchar()))w=w*10+(c&15);return w;
  8. }
  9. template<typename T,typename U>inline char smax(T&x,const U&y){return x<y?x=y,1:0;}
  10. template<typename T,typename U>inline char smin(T&x,const U&y){return x>y?x=y,1:0;}
  11. const int n=read(),N=5e5+5;
  12. int head[N],tot;double w[N],f[N],g[N],ans;
  13. struct node{int v,nxt;double w;}e[N<<1];
  14. 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;}
  15. void go(int x,int fa){
  16. f[x]=1-w[x];
  17. for(int i=head[x];i;i=e[i].nxt){
  18. const int&y=e[i].v;
  19. if(y!=fa){
  20. go(y,x);
  21. f[x]*=1-(1-f[y])*e[i].w;
  22. }
  23. }
  24. }
  25. void dfs(int x,int fa){
  26. ans+=1-g[x];
  27. for(int i=head[x];i;i=e[i].nxt){
  28. const int&y=e[i].v;
  29. if(y!=fa){
  30. 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);
  31. else g[y]=f[y];
  32. dfs(y,x);
  33. }
  34. }
  35. }
  36. int main(){
  37. REP(i,2,n){
  38. int x=read(),y=read();double z=read()/100.;
  39. add(x,y,z),add(y,x,z);
  40. }
  41. REP(i,1,n)w[i]=read()/100.;ans=0;
  42. go(1,0);g[1]=f[1];dfs(1,0);printf("%f\n",ans);
  43. return 0;
  44. }

[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. Error creating bean with name 'testController': Injection of resource dependencies failed;

    启动ssm项目报错: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 't ...

  2. 集合 List和Set

    分别向Set集合以及List集合中添加“A”,“a”,“c”,“C”,“a”5个元素,观察重复值“a”能否在List集合以及Set集合中成功添加. List<String> ls=new ...

  3. 高德地图和canvas画图结合应用(二)

    上节讲述了如在在高德地图中添加canvas图层,这节就讲述下如何在canvas图层添加鼠标的事件. 在上节脚本的最后加入以下代码: var text; $('#container').on('clic ...

  4. <Sicily>Brackets Matching

    一.题目描述 Let us define a regular brackets sequence in the following way: Empty sequence is a regular s ...

  5. UVa 12661 Funny Car Racing【 dijkstra 】

    题意:给出n个点,m条路,每条路用5个整数表示u,v,a,b,t u表示这条路的起点,v表示终点,a表示打开时间,b表示关闭时间,t表示通过这条道路需要的时间 看的紫书,因为边权不再仅仅是路上的时间, ...

  6. UVA-10200 Prime Time 素数(注意除法精度)

    题目链接:https://cn.vjudge.net/problem/UVA-10200 题意 给出一个公式$ m=n^2+n+41, n \in Z^+ $ 现在$ a,b\in[0, 10000] ...

  7. PKI 信息安全三大特性

    [机密性]发送方                                            接收方明文 M                                          ...

  8. Python组织文件 实践:查找大文件、 用Mb、kb显示文件尺寸 、计算程序运行时间

    这个小程序很简单原本没有记录下来的必要,但在编写过程中又让我学到了一些新的知识,并且遇到了一些不能解决的问题,然后,然后就很有必要记录一下. 这个程序的关键是获取文件大小,本来用 os.path.ge ...

  9. unity 美术注意事项

    有时候美术的一个不小心,就会给程序徒增极大的工作量,所以在项目开始之前是有必要和美术沟通一下,来规范一些东西, 1.将单体模型的轴心置中. 2.模型有父物体时,子物体应相对于父物体的(0,0,0)位置 ...

  10. java RSA加密算法

    [转]RSA加密算法   RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前 ...