这个题,题面是【】,出题人也是个【】

真就只放前向星过,把 vector 和离线建图都卡了。。。

题意:

一棵树,一条边有 \(p_i\) 的概率连接两个节点,一个点有 \(P_i\) 的概率亮着,问所有节点亮着的期望。

首先根据期望的线性性,所有节点亮着的期望明显可以拆成每个节点亮着的期望之和。然后仔细想想,\(E(X)=1 * p +0 * (1-p)=p\),所以只需要求亮着的概率即可。

怎么算呢?

考虑 dp,设 \(dp_1[u]\) 为 \(u\) 为根的子树中,\(u\) 亮着的概率。

直接算很困难,考虑算 \(u\) 不亮着的概率,不难发现是 \((1-P_u)\prod_{\texttt {v is u son}}(1-dp1[v] \times p_{(u,v)})\),用 \(1\) 减去即可得到 \(dp_1[u]\)。

接下来考虑换根。要求的东西还是一样的,只是需要维护父节点的 \(dp\) 值。

设 \(dp_2[u]\) 为考虑整棵树时 \(u\) 亮着的概率,此处为了方便设 \(f[u]\) 为去掉 \(u\) 为根的子树时,其父亲节点亮着的概率。

对于 \(u\) 的一个儿子 \(v\),我们很容易能够发现有 \(f[v]=(1-p_{(u,f[v])}\prod_{\texttt {x is u son }\And x \ne v } 1-dp1[x] \times e_{(u,x)})\)。

大多数同学都是直接用 \(dp2[u]\) 和 \(dp1[v]\) 直接进行转移,来得到其值,但其实可以对儿子维护一个前缀积和后缀积,这样就不会出现除法的问题了。

#include<cstdio>
#include<vector>
#include<cctype>
typedef double db;
const int M=5e5+5;
int n,m,cnt,h[M],f[M];db ans,p[M],dp1[M],dp2[M];
db v[M],lp[M],rp[M];
struct Edge{
int v,nx;db p;
}e[M<<1];
inline void Add(const int&u,const int&v,const db&p){
e[++cnt]=(Edge){v,h[u],p};h[u]=cnt;
e[++cnt]=(Edge){u,h[v],p};h[v]=cnt;
}
inline int read(){
int n(0);char s;
while(!isdigit(s=getchar()));
while(n=n*10+(s&15),isdigit(s=getchar()));
return n;
}
void DFS1(int u){
dp1[u]=1-p[u];
for(int E=h[u];E;E=e[E].nx)if(e[E].v^f[u])f[e[E].v]=u,DFS1(e[E].v),dp1[u]*=(1-dp1[e[E].v]*e[E].p);dp1[u]=1-dp1[u];
}
void DFS2(int u){
int e,i,len(0);db p=(dp2[u]*=1-::p[u]);
for(e=h[u];e;e=::e[e].nx)if(::e[e].v^f[u])v[++len]=1-dp1[::e[e].v]*::e[e].p;
for(i=1;i<=len;++i)lp[i]=(i==1?1:lp[i-1])*v[i];
for(i=len;i>=1;--i)rp[i]=(i==len?1:rp[i+1])*v[i];
for(e=h[u],i=1;e;e=::e[e].nx){
if(::e[e].v==f[u])continue;Edge&E=::e[e];dp2[E.v]*=p;dp2[u]*=1-dp1[E.v]*E.p;
if(i^1)dp2[E.v]*=lp[i-1];if(i^len)dp2[E.v]*=rp[i+1];
dp2[E.v]=1-(1-dp2[E.v])*E.p;++i;
}
for(e=h[u];e;e=::e[e].nx)if(::e[e].v^f[u])DFS2(::e[e].v);dp2[u]=1-dp2[u];
}
signed main(){
int i,u,v,p;n=read();
for(i=1;i<n;++i)u=read(),v=read(),p=read(),Add(u,v,.01*p);
for(i=1;i<=n;++i)::p[i]=.01*read(),dp2[i]=1;DFS1(1);DFS2(1);
for(i=1;i<=n;++i)ans+=dp2[i];printf("%.6f",ans);
}

LGP4284题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. MySQL--数据表操作--行转列和列转行

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11782549.html MySQL--数据表操作: 会用到的查询操作. 1. Limit的用法 ...

  2. 【BZOJ2820】YY的GCD(莫比乌斯反演 数论分块)

    题目链接 大意 给定多组\(N\),\(M\),求\(1\le x\le N,1\le y\le M\)并且\(Gcd(x, y)\)为质数的\((x, y)\)有多少对. 思路 我们设\(f(i)\ ...

  3. 通过C#在控制台输出各种图形文字

    这不是要准备公司年会了嘛 每个部门抓壮丁,必须安排至少一个节目 想着上去唱首歌算了,被毙,没有部门特色 妈蛋,唱歌没特色,那隔壁在前线工作的部门要表演个啥,抄表? 冥思苦想之下,给节目加了点部门特色, ...

  4. Note -「单位根反演」学习笔记

    \(\mathcal{Preface}\)   单位根反演,顾名思义就是用单位根变换一类式子的形式.有关单位根的基本概念可见我的这篇博客. \(\mathcal{Formula}\)   单位根反演的 ...

  5. Meterpreter核心命令

    实验目的 掌握Meterpreter常见的基本命令的使用 实验原理 1.Meterpreter介绍 meterpreter是metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻 ...

  6. 号外!号外!这个敏捷高效的大数据bi看板可以免费使用啦!

    随着信息革命的深入推进,数据已经成为国家基础性战略资源,各个行业开始重视数据分析,企业不同,数据分析需求当然不一样,如销售行业需要对商品进行销售分析:网站运营需要进行用户.渠道.流量等信息分析:制造行 ...

  7. 绘制地图其实并不难!如何绘制地图?看看Smartbi的制作方法

    数据地图是一种图形化的数据资产管理工具,它提供了多层次的图形化展现,并具备各种力度的控制能力,满足业务使用.数据管理.开发运维不同应用场景的图形查询和辅助分析需求.长期以来,很多职场人士都希望能在自己 ...

  8. SevenZip.SevenZipLibraryException: Can not load 7-zip library or internal COM error! Message: failed to load library.

    SevenZip.SevenZipLibraryException: Can not load 7-zip library or internal COM error! Message: failed ...

  9. Mac Mini 安装Ubuntu20.04 KVM

    在一台 Mac Mini mid 2011上安装Ubuntu20.04并配置KVM环境, 过程也适用于其他版本的Mac Mini. 硬件配置 I5 2415, 内存8G*2, 硬盘 SSD 500G ...

  10. Python:读取Excel 不带第一行标题

    #根据第0到第1列进行重建 0-X 1-Y PX=sheet_name.col_values(0)[1:] PY=sheet_name.col_values(1)[1:] 读取的某一列后在后边加[1: ...