LGP4284题解
这个题,题面是【】,出题人也是个【】
真就只放前向星过,把 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题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- MySQL--数据表操作--行转列和列转行
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11782549.html MySQL--数据表操作: 会用到的查询操作. 1. Limit的用法 ...
- 【BZOJ2820】YY的GCD(莫比乌斯反演 数论分块)
题目链接 大意 给定多组\(N\),\(M\),求\(1\le x\le N,1\le y\le M\)并且\(Gcd(x, y)\)为质数的\((x, y)\)有多少对. 思路 我们设\(f(i)\ ...
- 通过C#在控制台输出各种图形文字
这不是要准备公司年会了嘛 每个部门抓壮丁,必须安排至少一个节目 想着上去唱首歌算了,被毙,没有部门特色 妈蛋,唱歌没特色,那隔壁在前线工作的部门要表演个啥,抄表? 冥思苦想之下,给节目加了点部门特色, ...
- Note -「单位根反演」学习笔记
\(\mathcal{Preface}\) 单位根反演,顾名思义就是用单位根变换一类式子的形式.有关单位根的基本概念可见我的这篇博客. \(\mathcal{Formula}\) 单位根反演的 ...
- Meterpreter核心命令
实验目的 掌握Meterpreter常见的基本命令的使用 实验原理 1.Meterpreter介绍 meterpreter是metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻 ...
- 号外!号外!这个敏捷高效的大数据bi看板可以免费使用啦!
随着信息革命的深入推进,数据已经成为国家基础性战略资源,各个行业开始重视数据分析,企业不同,数据分析需求当然不一样,如销售行业需要对商品进行销售分析:网站运营需要进行用户.渠道.流量等信息分析:制造行 ...
- 绘制地图其实并不难!如何绘制地图?看看Smartbi的制作方法
数据地图是一种图形化的数据资产管理工具,它提供了多层次的图形化展现,并具备各种力度的控制能力,满足业务使用.数据管理.开发运维不同应用场景的图形查询和辅助分析需求.长期以来,很多职场人士都希望能在自己 ...
- 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 ...
- Mac Mini 安装Ubuntu20.04 KVM
在一台 Mac Mini mid 2011上安装Ubuntu20.04并配置KVM环境, 过程也适用于其他版本的Mac Mini. 硬件配置 I5 2415, 内存8G*2, 硬盘 SSD 500G ...
- Python:读取Excel 不带第一行标题
#根据第0到第1列进行重建 0-X 1-Y PX=sheet_name.col_values(0)[1:] PY=sheet_name.col_values(1)[1:] 读取的某一列后在后边加[1: ...