概率充电器

概率充电器

内存限制:256 MiB 时间限制:2000 ms 标准输入输出

题目描述

著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:
“采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看吧!”
SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件。进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定。
随后电能可以从直接充电的元件经过通电的导线使得其他充电元件进行间接充电。
作为 SHOI 公司的忠实客户,你无法抑制自己购买 SHOI 产品的冲动。在排了一个星期的长队之后终于入手了最新型号的 SHOI 概率充电器。
你迫不及待地将 SHOI 概率充电器插入电源——这时你突然想知道,进入充电状态的元件个数的期望是多少呢?

输入格式

第一行一个整数:n。概率充电器的充电元件个数。充电元件由 1-n 编号。
之后的 n-1 行每行三个整数 a, b, p,描述了一根导线连接了编号为 a 和 b 的充电元件,通电概率为 p。
第 n+2 行 n 个整数:qiq_iq?i??。表示 i 号元件直接充电的概率为 qi。

输出格式

输出一行一个实数,为进入充电状态的元件个数的期望,四舍五入到六位小数

样例

样例输入

3
1 2 50
1 3 50
50 0 0

样例输出

1.000000

数据范围与提示

对于 100%的数据,n≤500000,0≤p,qi≤100。

见到期望首先想dp直接想联通的概率比较难码,故思考f表示不联通的概率最终用1-f就表示联通的概率f[x]=不连通的概率,p[x]表示这个点直接联通概率我们为了避免后效性高斯消元(高斯消元消不起)必须选择其他方法。我们先求出来父亲对儿子贡献,再求出儿子对父亲贡献就好了(其实就是常规树形dp)那么我们先考虑儿子对父亲的贡献父亲可以由每一个儿子转移过来,父亲不连通的概率等于自己本身不连的概率乘以所有自己儿子不相连的概率首先儿子需要联通才可以由儿子联通转移过来,用1-f[x]表示自己儿子联通的概率(1-f)*w表示当儿子联通的时候由儿子转移过来的概率1-...等于不连通的概率再让他们都相乘 于是得到f[x]=(1-p[x])*∏1-(1-f[son])*联通概率然后儿子的概率由父亲贡献考虑f[v]表示除了v以外贡献得到f[v]=(1-(1-f[x]/(1-(1-f[儿子])*联通概率))*联通概率)思考为什么是这个首先f[v]=1-当所有父亲被联通概率-其联通时的概率*这个边联通的概率 那么父亲被别的点转移过来的概率(除去v点)      f[x]1--  ____________    1-(1-f[v])*w 1-f 表示自己儿子被转移过来的概率(1-f)*w表示父亲与这个点相连的概率1-..表示包含v在内的不相连的概率 再用 f[x]/...不连通的概率至于为什么除呢 ?例如得不病 1/5 ,不得乙病3/5 ,不甲病1/3。那么1/5*5/3=1/3=不甲病 ,1-表示联通的概率以下依然是本人丑陋代码

 1 #include<bits/stdc++.h>
 2 #define ll int
 3 #define db double
 4 #define e 1e-9
 5 #define inf 0x7fffffff
 6 #define A 1000100
 7 using namespace std;
 8 ll n,m,head[A],ver[A],next[A],tot=0,xx,yy;
 9 db gai[A],zz,gl[A],f[A];
10 bool flag[A];
11 void add(ll x,ll y,db gailv)
12 {
13     next[++tot]=head[x];
14     head[x]=tot;
15     ver[tot]=y;
16     gai[tot]=gailv*0.01;
17 }
18 inline ll R()
19 {
20     ll X=0,F=1;char c=getchar();
21     while(!isdigit(c)) c==‘-‘?F=-1:F=F,c=getchar();
22     while(isdigit(c)) X=(X<<1)+(X<<3)+(c-‘0‘),c=getchar();
23     return F*X;
24 }
25 db dfs1(ll x,ll fa)
26 {
27     for(ll i=head[x];i;i=next[i])
28     {
29         ll y=ver[i];db g=gai[i];
30         if(y==fa) continue;
31
32 //        printf("x=%d y=%d fx=%lf fy=%lf %lf=(1-f[y])*g\n",x,y,f[x],f[y],(1-f[y])*g);
33         dfs1(y,x);f[x]*=(1-(1-f[y])*g);
34     }
35 }
36 void dfs2(ll x,ll fa)
37 {
38     db r;
39     for(ll i=head[x];i;i=next[i])
40     {
41         ll y=ver[i];db g=gai[i];
42         if(y==fa) continue;
43         r=1.0-(f[x])/(1-(1-f[y])*g);
44         if(fabs(r)>e&&fabs(f[y])>e)
45         f[y]*=1-r*g;
46         dfs2(y,x);
47     }
48 }
49 int main()
50 {
51     n=R();
52     for(ll i=1;i<n;i++)
53     {
54         xx=R(),yy=R();scanf("%lf",&zz);
55         add(xx,yy,zz);
56         add(yy,xx,zz);
57     }
58     for(ll i=1;i<=n;i++)
59     {
60         scanf("%lf",&gl[i]);
61         gl[i]*=0.01;
62         f[i]=1-gl[i];
63     }
64     memset(flag,0,sizeof(flag));dfs1(1,inf);
65     memset(flag,0,sizeof(flag));dfs2(1,inf);
66     db ans=0;
67     for(ll i=1;i<=n;i++)
68         ans+=1-f[i];
69     printf("%.6lf\n",ans);
70 }

通过写这个题解,我深查自己语言表达能力欠缺。

原文地址:https://www.cnblogs.com/znsbc-13/p/11136912.html

时间: 2024-10-22 15:53:36

概率充电器的相关文章

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

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

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

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]

[SHOI2014]概率充电器

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

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

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

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

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

P4284 [SHOI2014]概率充电器

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

[bzoj 3566][SHOI 2014]概率充电器

传送门 Description SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定. 随后电能可以从直接充电的元件经过通电的导线使得其他充电元件进行间接充电. 进入充电状态的元件个数的期望是多少呢? Solution \[ E=\sum f_i\ \ \ 其中f_i表示节点i通电的概率 \] 那么怎么求\(f_i\)呢?显然,一个点通电有三种情况:来自i的父亲节点.来自i的某个儿子节点.来自i自

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

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