正题

题目链接:https://www.luogu.com.cn/problem/P4284


题目大意

nnn个点的一棵树,每个点有pip_ipi​概率通电,每个边有一定概率可以导电。求期望有电的节点个数。


解题思路

发现考虑通电概率很难,所以我们可以考虑不通电的概率。

如果只是计算一个点的话很方便,我们统计一下以一个点为根时候每个点的通电概率fif_ifi​即可。

有转移方程fx=(1−px)∗∏(fy+(1−fy)∗(1−w))f_x=(1-p_x)*\prod (\ f_y+(1-f_y)*(1-w)\ )fx​=(1−px​)∗∏( fy​+(1−fy​)∗(1−w) )

然后换根计算即可。

时间复杂度O(n)O(n)O(n)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=5e5+10;
struct node{int to,next;double w;
}a[N*2];
int n,tot,ls[N];
double f[N],g[N],p[N],ans;
void addl(int x,int y,double w){a[++tot].to=y;a[tot].next=ls[x];a[tot].w=w;ls[x]=tot;return;
}
void dfs(int x,int fa){f[x]=1.0-p[x]; for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa)continue;dfs(y,x);f[x]*=f[y]+(1.0-f[y])*(1.0-a[i].w);}return;
}
void dp(int x,int fa){for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa)continue;double k=g[x]/(f[y]+(1.0-f[y])*(1-a[i].w));g[y]=f[y]*(k+(1.0-k)*(1.0-a[i].w));dp(y,x);}ans+=g[x];return;
}
int main()
{scanf("%d",&n);for(int i=1;i<n;i++){int x,y,w;scanf("%d%d%d",&x,&y,&w);addl(x,y,(1.0*w)/100.0);addl(y,x,(1.0*w)/100.0);}for(int i=1;i<=n;i++)scanf("%lf",&p[i]),p[i]/=100;dfs(1,1);g[1]=f[1];dp(1,1);printf("%lf",n-ans); return 0;}

P4284-[SHOI2014]概率充电器【树形dp,换根法,数学期望】相关推荐

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

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

  2. jzoj3844-统计损失【树形dp,换根法】

    正题 题目链接:https://jzoj.net/senior/#main/show/3844 题目大意 一棵树,求每条路径的点权乘积之和. 解题思路 若只考虑从xxx出发往子树的路径,那么有fx=a ...

  3. P4827-[国家集训队]Crash 的文明世界【树形dp,换根法,斯特林数】

    正题 题目链接:https://www.luogu.com.cn/problem/P4827 题目大意 一颗nnn个点的树,定义dis(i,j)dis(i,j)dis(i,j)表示树上i,ji,ji, ...

  4. 『树形DP·换根法』Accumulation Degree

    题目描述 有一个树形的水系,由 N-1 条河道和 N 个交叉点组成. 我们可以把交叉点看作树中的节点,编号为 1~N,河道则看作树中的无向边. 每条河道都有一个容量,连接 x 与 y 的河道的容量记为 ...

  5. 洛谷 P4284 [SHOI2014]概率充电器 解题报告

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

  6. bzoj 3743 [Coci2015]Kamp——树形dp+换根

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3743 树形dp+换根. "从根出发又回到根" 减去 "mx & ...

  7. Educational Codeforces Round 67 (Rated for Div. 2)(D思维题 线段树/E树形dp(换根dp) 二次扫描与换根法)

    心得 D写了个假算法被hack了wtcl- E据涛神说是二次扫描与换根法,看了看好像和树形dp差不多 F概率dp G费用流 回头再补 思路来源 马老师 归神 贤神等代码 http://www.mami ...

  8. [BZOJ3677/UOJ#105][APIO2014]Beads and wires 连珠线(树形dp+换根)

    Address https://www.lydsy.com/JudgeOnline/problem.php?id=3677 http://uoj.ac/problem/105 Solution 考虑一 ...

  9. 最大疯子树-树形dp+换根+二次扫描

    分析: 疯子树肯定还是一棵树. 所以,所谓的最短路径就是吓唬你的,树上两点之间有且只有一条路径. b1和b2必须是相邻的,否则不可能是一棵疯子树. 再想一想,用同样的方式构造剩下的点的话,那么可以得到 ...

最新文章

  1. linux中权限的修改
  2. linux下使用extundelete恢复ext3/ext4分区数据
  3. 3.Vue 条件渲染
  4. 开学前要多为孩子健康做准备
  5. C++(STL):03---智能指针之shared_ptr
  6. WordPress主题:Zibll子比主题 V4.0 绿色版
  7. 使用TDengine快速搭建运维监测系统
  8. Python笔记(7) 字符串
  9. 【Computer Organization笔记18】大实验讨论:控制器设计、指令流程表
  10. 华为2014 第三题地铁换乘 java实现
  11. 西门子PLC程序下载方法简介
  12. CAM350测量pcb尺寸的操作方法
  13. node mysql菜鸟教程_Node.js 创建第一个应用
  14. JPA语法大全 特别是JPA的不等于
  15. linux进价命令(sort,comm,unip等)
  16. 计算机软件系统崩溃,系统崩溃,解决系统崩溃的方法全集
  17. 加班者的王者语录(改编)
  18. 我教宝宝学AI (五)挖坑中成长
  19. SMT在生产时,对环境温度的要求有哪些?
  20. SQL注入漏洞攻守之道

热门文章

  1. python3多线程queue_Python多线程(3)——Queue模块
  2. java 推送数据给js,Node.js实现数据推送
  3. oracle dbfile数,通过案例学调优之--Oracle参数(db_file_multiblock_read_count)
  4. java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...
  5. py2exe for python3_使用Py2Exe for Python3创建自己的exe程序
  6. python判断列表是否为空_Jinja2: 判断返回的列表是否为空
  7. 蓝桥杯-卡片-填空题
  8. 101. 对称二叉树023(BFS)
  9. IDEA如何在包下建立子包
  10. LeetCode28 对称的二叉树-简单