【期望DP】概率充电器(luogu 4284)

正题

luogu 4284


题目大意

给你棵树,第i个点自己通电的概率是wiw_iwi,第j条边连接的两个点之间通电的概率是pjp_jpj,问你通电的点个数的期望值


题目大意

fif_ifi为第i个点通电的概率,那么:

fi=solvej∈link{i}(fi,fj∗pj)f_i=solve_{j\in link\{i\}}(f_i, f_j*p_j)fi=solvejlink{i}(fi,fjpj)

即从该点转一过来,fif_ifi初值为wiw_iwi,solve为合并两个概率

假设有x,y的概率由不同的两个方法通电,那么p=1-(1-x)(1-y)=x+y-xy,即是solve

可以先按上述方法向父亲转移,计算出子节点传递到x的贡献

.

然后可以再从根节点向下计算父亲向x的贡献,但是要减去该点传到父亲再传回去的概率,记不是由x传递过来,fa通电的概率为p,该点传到父亲的贡献为g,那么有:

p+g−pg=ffap+g-pg=f_{fa}p+gpg=ffa

p(1−g)=ffa−gp(1-g)=f_{fa}-gp(1g)=ffag

p=ffa−g1−gp=\frac{f_{fa}-g}{1-g}p=1gffag

这样就可以得到其贡献了


代码

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 500050
using namespace std;
int n, x, y, tot, h[N], fa[N], deg[N];
double z, ans, g[N], f[N];
queue<int>d;
struct rec
{int to, next;double p;
}e[N<<1];
int read()
{char x=getchar();int ds=0,fs=1;while (x<'0'||x>'9') {if (x=='-') fs=-1;x=getchar();}while (x>='0'&&x<='9') ds=(ds<<3)+(ds<<1)+x-48,x=getchar();return ds*fs;
}
void add(int x, int y, double z)
{e[++tot].to = y;e[tot].p = z;e[tot].next = h[x];h[x] = tot;return;
}
double get(double x, double y)//计算
{return x + y - x * y;
}
void bfs()
{d.push(1);while(!d.empty()){int x = d.front();d.pop();for (int i = h[x]; i; i = e[i].next){int v = e[i].to;if (v != fa[x]){fa[v] = x;deg[v]--;d.push(v);}}}
}
void bfs1()
{for (int i = 1; i <= n; ++i)if (!deg[i])d.push(i);while(!d.empty()){int x = d.front();d.pop();if (!--deg[fa[x]]) d.push(fa[x]);for (int i = h[x]; i; i = e[i].next){int y = e[i].to;if (y != fa[x]){g[y] = f[y] * e[i].p;//从下向上传f[x] = get(f[x], g[y]);}}}return;
}
void bfs2()
{d.push(1);while(!d.empty()){int x = d.front();d.pop();for (int i = h[x]; i; i = e[i].next){int y = e[i].to;if (y != fa[x]){if (g[y] < 1.0) f[y] = get(f[y], ((f[x] - g[y]) / (1 - g[y])) * e[i].p);//从上到下传,保证分母不为0d.push(y);}}}
}
/*
void dfs1(int x, int fa)//dfs会暴栈
{f[x] = f[x] / 100.0;for (int i = h[x]; i; i = e[i].next){int y = e[i].to;if (y != fa){dfs1(y, x);g[y] = f[y] * e[i].p;f[x] = get(f[x], g[y]);}}return;
}
void dfs2(int x, int fa)
{for (int i = h[x]; i; i = e[i].next){int y = e[i].to;if (y != fa){if (g[y] < 1.0) f[y] = get(f[y], ((f[x] - g[y]) / (1 - g[y])) * e[i].p);dfs2(y, x);}}return;
}
*/
int main()
{n = read();for (int i = 1; i < n; ++i){x = read();y = read();z = read() / 100.0;add(x, y, z);add(y, x, z);deg[x]++;deg[y]++;}for (int i = 1; i <= n; ++i)f[i] = read() / 100.0;bfs();bfs1();bfs2();
//	dfs1(1, 0);
//	dfs2(1, 0);for (int i = 1; i <= n; ++i)ans = ans + f[i];printf("%.6lf", ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P3760-[TJOI2017]异或和【树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P3760 题目大意 给出nnn个数字的一个序列aaa&#xff0c;求它所有区间和的异或和 n≤105,∑ai≤106n\leq 10^5,\sum a_i\leq 10^6n≤105,∑ai​≤106 解题思路 开始写了个前缀和FFTFFTFFT发现要卡常然后就换了个方法。 每一…

手把手教你搭APM之Skywalking搭建指南(支持Java/C#/Node.js)

前言什么是APM?全称:Application Performance Management可以参考这里:现代APM体系&#xff0c;基本都是参考Google的Dapper&#xff08;大规模分布式系统的跟踪系统&#xff09;的体系来做的。通过跟踪请求的处理过程&#xff0c;来对应用系统在前后端处理、服务端调用的性能…

牛客练习赛 64——错排

A.怪盗-1412 111…1⏟⌊n2⌋444…4⏟m111…1⏟⌈n2⌉222…2⏟k\begin{matrix} \underbrace{ 111\dots\ 1} \\ \lfloor \frac{n}{2} \rfloor \end {matrix}\begin{matrix} \underbrace{ 444\dots\ 4} \\ m \end{matrix}\begin{matrix} \underbrace{ 111\dots\ 1} \\ \lceil \fra…

牛客网状压dp

状压dp 视频链接 &#xff08;如果想购买网课&#xff0c;可以用我的邀请码&#xff09; 用我的链接购买&#xff0c;我再反你10&#xff0c;一共花54多值 购买链接 不放心可以先加我好友2830872914 总试题链接 文章目录状压dp预备知识——位运算例题&#xff1a;引入&#x…

【线段树】海报(loj 3264)

正题 loj 3264 题目大意 有一个环&#xff0c;环上n个点&#xff0c;权值为a&#xff0c;有m次修改&#xff0c;每次修改一个aia_iai​&#xff0c;然后让你选取一些数&#xff0c;使环上不存在连续四个以上的数被选取&#xff0c;让你求所选数的最大权值和 解题思路 不难想…

P4338-[ZJOI2018]历史【LCT】

正题 题目链接:https://www.luogu.com.cn/problem/P4338 题目大意 给出nnn个点的一棵树&#xff0c;和每个点进行accessaccessaccess的次数aia_iai​&#xff0c;要求安排一个顺序使得虚实边转换最多。 mmm次修改一个点让aia_iai​加上www后求答案 n,m∈[1,4∗105],ai,w∈[1,…

小G有一个大树

来源&#xff1a;牛客网 &#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 小G想要把自己家院子里的橘子树搬到家门口&#xff08;QAQ。。就当小G是大力水手吧&…

.Net Core功能开关实战

为了快速发布开发完成的功能&#xff0c;企业通常会以比较快的迭代周期持续发布。但是由于某些 原因或场景&#xff0c;需要在发布的时候将某些功能隐藏起来或者小规模的开放&#xff08;例如只有某些特定用户可以使用、或者特定日期开放&#xff09;&#xff0c;通过使用功能开…

AtCoder Beginner Contest 179 总结

A - Plural Form 模拟签到题1 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<string> #include<iostream> #include<algorithm> using namespace std; const int N100010; int main() {IO;int T1;//cin…

纪中A组模拟赛总结(2021.7.19)

成绩 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3101010lyflyflyf175175175000757575100100100 前言&#xff1a;进前10啦&#xff01;&#xff01; 总结 T1看着推了一下&#xff0c;发现可以改变答案的解决顺序&#xff0c;然后在O(n)内求解&#xff0c;打完…

AT4505-[AGC029F]Construction of a tree【构造题,hall定理,网络流】

正题 题目链接:https://www.luogu.com.cn/problem/AT4505 题目大意 给出nnn个点和n−1n-1n−1个点集UiU_iUi​&#xff0c;每个点集中选择两个点连边使得该图是一棵树。求方案。 n∈[1,105],∑i1n−1∣Ui∣∈[1,2∗105]n\in[1,10^5],\sum_{i1}^{n-1} |U_i|\in[1,2*10^5]n∈[1…

学习究竟是为了什么?

今天无意中看到一句话&#xff0c;人如果停止了学习&#xff0c;就开始走向失败。这句话其实应该送给每一个面临30岁焦虑期的开发者&#xff0c;同时也应该成为每一个开发者内心的真实写照。 想问一下大家一个问题&#xff0c;多久没有学习新的知识呢&#xff1f;尤其…

Codeforces Round #671 (Div. 2)

当天晚上&#xff0c;本来想参加一下比赛&#xff0c;结果感觉静不下心来做题&#xff0c;而且最难受的是读个题都不明白&#xff0c;一直在理解题意。 A - Digit Game 分析不难发现&#xff1a; 如果nnn是奇数&#xff0c;那么最后留下的数字一定是奇数位上的数字&#xff0…

【网络流】人员雇佣(luogu 1791)

正题 luogu 1791 题目大意 有n个人&#xff0c;选择第i个人的代价是aia_iai​&#xff0c;如果i,j同时被选那么有贡献wi,jw_{i,j}wi,j​&#xff0c;如果i选了j没选那么有贡献−wi,j-w_{i,j}−wi,j​&#xff0c;问你最大贡献&#xff08;减去代价&#xff09; 解题思路 最大…

AT4144-[ARC098D]Donation【Kruskal重构树,dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT4144 题目大意 nnn个点mmm条边的一张无向联通图&#xff0c;每个点有两个值ai,bia_i,b_iai​,bi​。表示经过该点时需要拥有aia_iai​元&#xff0c;该点需要捐献bib_ibi​元。 任意起点&#xff0c;询问开始时至少多少钱才…

Strategic game

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 10000K&#xff0c;其他语言20000K 64bit IO Format: %lld题目描述 Bob enjoys playing computer games, especially strategic games, but sometimes he c…

ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)

上个月15日&#xff0c;上海MVP做了一次线下的技术分享活动&#xff0c;我分享的主题是《快速构建容器化的ASP.NET Core应用程序》&#xff0c;有关这次活动的简报&#xff0c;可以参考这里。另外&#xff0c;我的主题分享的PPT也可以点击这里下载。由于线下活动时间紧迫&#…

牛客练习赛 63 F-牛牛的树行棋

F-牛牛的树行棋 大佬题解 对于每一个棋子来说&#xff0c;都是独立的&#xff0c;因此当前局面的 SG 值就是每一枚棋子的 SG 值的异或和。若一枚棋子的往子树内最多可以走 kkk 步&#xff0c;它的 SG 值为 kkk。然后就可以dfs求出整个局面的SG值。 仔细再思考一步&#xff1a…

【DP】小学生语文题(jzoj 5102)

正题 jzoj 5102 题目大意 给你两个串A,B&#xff0c;字母个数相等&#xff0c;可以把B的一个字符移到前面某个位置&#xff0c;问你最少移多少次可以使A,B相等 解题思路 设fi,jf_{i,j}fi,j​为A匹配了i-n&#xff0c;B用了j-n 1.当i,j匹配时fi,jfi1,j1f_{i,j}f_{i1,j1}fi,j…

AT3949-[AGC022D]Shopping【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/AT3949 题目大意 长度为LLL的坐标轴上&#xff0c;给出nnn个点&#xff0c;每个点xix_ixi​需要购物tit_iti​的时间&#xff0c;一辆车在0∼L0\sim L0∼L折返跑&#xff0c;求从000出发购物完回到000的最短时间。 n∈[1,310…