P4284-[SHOI2014]概率充电器【树形dp,换根法,数学期望】
正题
题目链接: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,换根法,数学期望】相关推荐
- BZOJ3566 [SHOI2014]概率充电器 (树形DP概率DP)
3566: [SHOI2014]概率充电器 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: "采用全新纳米级加工技术,实现元件与 ...
- jzoj3844-统计损失【树形dp,换根法】
正题 题目链接:https://jzoj.net/senior/#main/show/3844 题目大意 一棵树,求每条路径的点权乘积之和. 解题思路 若只考虑从xxx出发往子树的路径,那么有fx=a ...
- P4827-[国家集训队]Crash 的文明世界【树形dp,换根法,斯特林数】
正题 题目链接:https://www.luogu.com.cn/problem/P4827 题目大意 一颗nnn个点的树,定义dis(i,j)dis(i,j)dis(i,j)表示树上i,ji,ji, ...
- 『树形DP·换根法』Accumulation Degree
题目描述 有一个树形的水系,由 N-1 条河道和 N 个交叉点组成. 我们可以把交叉点看作树中的节点,编号为 1~N,河道则看作树中的无向边. 每条河道都有一个容量,连接 x 与 y 的河道的容量记为 ...
- 洛谷 P4284 [SHOI2014]概率充电器 解题报告
P4284 [SHOI2014]概率充电器 题目描述 著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完 ...
- bzoj 3743 [Coci2015]Kamp——树形dp+换根
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3743 树形dp+换根. "从根出发又回到根" 减去 "mx & ...
- Educational Codeforces Round 67 (Rated for Div. 2)(D思维题 线段树/E树形dp(换根dp) 二次扫描与换根法)
心得 D写了个假算法被hack了wtcl- E据涛神说是二次扫描与换根法,看了看好像和树形dp差不多 F概率dp G费用流 回头再补 思路来源 马老师 归神 贤神等代码 http://www.mami ...
- [BZOJ3677/UOJ#105][APIO2014]Beads and wires 连珠线(树形dp+换根)
Address https://www.lydsy.com/JudgeOnline/problem.php?id=3677 http://uoj.ac/problem/105 Solution 考虑一 ...
- 最大疯子树-树形dp+换根+二次扫描
分析: 疯子树肯定还是一棵树. 所以,所谓的最短路径就是吓唬你的,树上两点之间有且只有一条路径. b1和b2必须是相邻的,否则不可能是一棵疯子树. 再想一想,用同样的方式构造剩下的点的话,那么可以得到 ...
最新文章
- linux中权限的修改
- linux下使用extundelete恢复ext3/ext4分区数据
- 3.Vue 条件渲染
- 开学前要多为孩子健康做准备
- C++(STL):03---智能指针之shared_ptr
- WordPress主题:Zibll子比主题 V4.0 绿色版
- 使用TDengine快速搭建运维监测系统
- Python笔记(7) 字符串
- 【Computer Organization笔记18】大实验讨论:控制器设计、指令流程表
- 华为2014 第三题地铁换乘 java实现
- 西门子PLC程序下载方法简介
- CAM350测量pcb尺寸的操作方法
- node mysql菜鸟教程_Node.js 创建第一个应用
- JPA语法大全 特别是JPA的不等于
- linux进价命令(sort,comm,unip等)
- 计算机软件系统崩溃,系统崩溃,解决系统崩溃的方法全集
- 加班者的王者语录(改编)
- 我教宝宝学AI (五)挖坑中成长
- SMT在生产时,对环境温度的要求有哪些?
- SQL注入漏洞攻守之道
热门文章
- python3多线程queue_Python多线程(3)——Queue模块
- java 推送数据给js,Node.js实现数据推送
- oracle dbfile数,通过案例学调优之--Oracle参数(db_file_multiblock_read_count)
- java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...
- py2exe for python3_使用Py2Exe for Python3创建自己的exe程序
- python判断列表是否为空_Jinja2: 判断返回的列表是否为空
- 蓝桥杯-卡片-填空题
- 101. 对称二叉树023(BFS)
- IDEA如何在包下建立子包
- LeetCode28 对称的二叉树-简单