BZOJ3566 概率充电器 概率dp

哼我就要正着推

链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3566

题意:节点有没有电看脸,线好不好看脸,问一个正常的亚洲人会给几个东西充上电。

我就正着推了怎么地首先,我们定义一下数组含义,$f[x]$表示这个点有电的概率,$g[x]$表示这个点被自己和儿子充上电的概率。

【普及选修2-3知识】

概率的可加性:$P(X∨Y)=P(X)+P(Y)-P(X∧Y)$。

那么这样$g[x]$就很好推了:$g[x]=g[没有v的x概率]+g[v]*l-g[没有v的x概率]*g[v]*l$,其中,$l$表示两点间连线带电概率。这个一遍从下到上搞上去就好了。

问题在于这个$f[x]$上。首先$f[x]$一定包括$g[x]$,另外还有一部分是他的爸爸给他充上了电的概率,这就是我们接下来需要求的。

首先我们可以肯定根节点$f[root]=g[root]$。

接下来,我们再次考虑$f[x]$的求法:$f[x]=f[没有v的x]+g[v]*l-f[没有v的x]*g[v]*l$,然后我们使用高深的数学知识移项得到$f[x]-g[v]*l=f[没有v的x]*(1-g[v]*l)$,就可以得到爸爸没有这个儿子有电的概率,然后儿子的$f[v]$就是:$f[v]=g[v]+((f[x]-g[v]*l)/(1-g[v]*l))*l-g[v]*((f[x]-g[v]*l)/(1-g[v]*l))*l$

啊好麻烦我后悔了(躺倒在沙滩上的一条咸鱼)(大概这就是做这道题每个正着推的人的心路历程)

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 using namespace std;
 7 const int maxn=500005;
 8 const double eps=1e-8;
 9 struct node
10 {
11     int from,to,next;long double dis;
12     node(){;}
13     node(int u,int v,long double w,int x):from(u),to(v),dis(w),next(x){;}
14 }edge[maxn<<1];
15 int head[maxn],tot;
16 void addedge(int u,int v,long double w)
17 {
18     edge[++tot]=node(u,v,w,head[u]);head[u]=tot;
19 }
20 int n,pa[maxn];
21 long double f[maxn],g[maxn],p[maxn];
22 void dfs1(int root,int fa)
23 {
24     pa[root]=fa;g[root]=p[root];
25     for(int i=head[root];i;i=edge[i].next)
26     {
27         int v=edge[i].to;
28         if(v!=fa)
29         {
30             dfs1(v,root);
31             long double tmp=g[v]*edge[i].dis;
32             g[root]=g[root]+tmp-g[root]*tmp;
33         }
34     }
35 }
36 long double ans;
37 void dfs2(int root)
38 {
39     ans+=f[root];
40     for(int i=head[root];i;i=edge[i].next)
41     {
42         int v=edge[i].to;
43         if(v!=pa[root])
44         {
45             long double tmp=g[v]*edge[i].dis,temp=fabs(1-tmp)<=eps?1:(f[root]-tmp)/(1-tmp),tmp2=temp*edge[i].dis;
46             f[v]=g[v]+tmp2-g[v]*tmp2;
47             dfs2(v);
48         }
49     }
50 }
51 int haha()
52 {
53     scanf("%d",&n);
54     for(int i=1;i<n;i++)
55     {
56         int x,y;double z;scanf("%d%d%lf",&x,&y,&z);long double dis=z/100.0;
57         addedge(x,y,dis);addedge(y,x,dis);
58     }
59     for(int i=1;i<=n;i++){double x;scanf("%lf",&x);p[i]=x/100.0;}
60     dfs1(1,0);f[1]=g[1];dfs2(1);
61     printf("%0.6lf\n",(double)ans);
62 }
63 int sb=haha();
64 int main(){;}

BZOJ3566

时间: 2024-07-28 23:26:16

BZOJ3566 概率充电器 概率dp的相关文章

bzoj 3566: [SHOI2014]概率充电器 树形DP

首先普及一个概率公式 P(A+B)=P(A)+P(B)-P(AB) 题意:一些充电元件和导线构成一棵树,充电元件是否能充电有2种情况, 1.它自己有qi%的概率充电 2.与它相邻的元件通过导线给它充电(导线有p%的概率导通) 求最终充了电的元件的期望 题解:首先可以将元件能否充电分成3种情况考虑, 1.它自己给自己充好了电 2.它的儿子方向给它传送了电 3.它的父亲方向给它传送了电. 对于1,题目已经给出可以直接赋值, 对于2,可以通过一次树的深度遍历求得.pson[now]=pson[now]

BZOJ 3566 SHOI 2014 概率充电器 概率DP

题目大意:给出一棵树,每个节点都有一个充电概率,每一条边有一个导电概率,求期望有多少个点充电. 思路:写不出题解,粘一个详细的地址:http://wyfcyx.is-programmer.com/posts/74623.html CODE: #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> #include <iomanip> #include <iostream> #i

【BZOJ】3566: [SHOI2014]概率充电器

[算法]树型DP+期望DP [题意]一棵树上每个点均有直接充电概率qi%,每条边有导电概率pi%,问期望有多少结点处于充电状态? [题解]引用自:[BZOJ3566][SHOI2014]概率充电器 树形DP 概率DP by 空灰冰魂 最大的难点在于计算每个点充电期望时,两个节点各自的期望都会影响对方的期望. 所以考虑转化对象,改为求每个节点充不上电的期望,充不上电就不用考虑两者的相互影响. fi表示结点i由子结点和自身充不上电的概率 gi表示结点i由父结点充不上电的概率 第一次DFS: hi表示

【bzoj3566】[SHOI2014]概率充电器 树形概率dp

题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看吧!”SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定.随后电能可以从直接充电的元件经过通电的导线使得其他充电元件进行间接充电.作为 SHOI 公司的忠实客户,你无

【BZOJ3566】概率充电器(动态规划)

[BZOJ3566]概率充电器(动态规划) 题面 BZOJ Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看吧! " SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定. 随后电能可以从直

Bzoj3566 [SHOI2014]概率充电器

Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 999  Solved: 428 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看吧!”SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元

bzoj 3566: [SHOI2014]概率充电器

Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器:"采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看吧!"SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定.随后电能可以从直接充电的元件经过通电的导线使得其他充电元件进行间接充电.作为 SHO

P4284 [SHOI2014]概率充电器

链接:https://www.luogu.org/problemnew/show/P4284 题目描述 著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决 定!SHOI 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看 吧!" SHOI 概率充电器由n-1 条导线连通了n 个充电元件.进行充电时,每条导 线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率 决

Loj #2192. 「SHOI2014」概率充电器

Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生 活不可或缺的必需品!能充上电吗?现在就试试看吧!」 SHOI 概率充电器由 \(n-1\) 条导线连通了 \(n\) 个充电元件.进行充电时,每条导线是否可以导电以 概率决定,每一个充电元件自身是否直接进行充电也由概率决定.随后电能可以从直接充电的元件经