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 & ...
随机推荐
- js读取txt文件并下载
//我在vue中测试, 可行, 这个只适用于google浏览器, ie需要xObject对象 // 下载txt if (/(txt)$/.test(name[1])) { var xhr = new ...
- 虫师Selenium2+Python_6、Selenium IDE
P155--创建测试用例 录制脚本 编辑脚本 定位辅助 P159--Selenium IDE 命令 在浏览器中打开URL,可以接受相对路径和绝对路径两种形式 open open(url) 单击链接 ...
- Solution -「洛谷 P4372」Out of Sorts P
\(\mathcal{Description}\) OurOJ & 洛谷 P4372(几乎一致) 设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...
- 小牟有趣的PWN
咳咳,主要是记一下最近学二进制然后工作室里面一个一起学pwn,然后遇到的一个比较好玩的题目. 一共呢,是两个文件,这也是最近学习pwn第一次做到两个文件的题目, 如果想要源文件,这边可以加我们的工作室 ...
- Bugku--web-wp
Bugku地址:https://ctf.bugku.com/challenges 0x01 web2 地址:http://123.206.87.240:8002/web2/ ,查看源码 web2 0x ...
- web安全之快速反弹 POST 请求
在 CTF Web 的基础题中,经常出现一类题型:在 HTTP 响应头获取了一段有效期很短的 key 值后,需要将经过处理后的 key 值快速 POST 给服务器,若 key 值还在有效期内,则服务器 ...
- 网络测试技术——802.1X_MD5认证(下篇)
上篇我们讲到802.1X_MD5的简介.认证过程.测试组网以及测试环境准备,本期我们将为大家带来测试的详细步骤: 六.测试仪配置 1.占用端口 端口功能 (1)端口1用来模拟DOT1X和发送流量 (2 ...
- 医疗BI系统的数据分析是怎样的?
在社会日益发展和信息化的过程中,已经发展处行业化.智能化的各类IT系统及子系统,如ERP.CRM.财务等等.实现经营流程数字化的同时,各行业企业的数据库日益庞大,医疗行业也不例外.我国医疗行业经过多年 ...
- 【Java分享客栈】我有一个朋友,和前端工程师联调接口被狠狠鄙视了一番。
前言 我有一个朋友,昨天和前端工程师联调一个接口,然后被狠狠鄙视了一番. 大家知道,自从前后端分离以后,像我一样一直以Java工程师为傲而自居的码圣们就砍掉了一半脊梁,从此被贴上了"Java ...
- 解除Ubuntu禁止root远程登录
编辑SSH服务配置文件 编辑SSH服务的配置文件sshd_config,修改SSH的端口和root用户权限. 使用到的命令:(按字母 i 进入编辑模式,按ESC退出编辑模式, :wq 保存退出). r ...