加油,两道了,也就还剩那么二十来道吧,慢慢做。。。。。。

题目大意:

给你一颗树,树上的每一个节点都有一定的概率p[i]能冲上电,有电的点,可以通过树上的边,一定概率地将电传递到与它相邻的点,同时对于每条边,都有一个传递电能的成功率。让你求出通电节点个数的期望。

读入:一个数n,接下来n-1行,每行三个数u,v,p,表示有一条连接节点u和v的边,导电的概率为p,最后一行共n个数,表示每个节点一开始就有电的概率。

  1. 输出:一个数E,表示期望(取6位小数)。

思路分析:

换根DP+期望DP

很清楚,最后的答案就是每一个点通电的概率相加。那么对于每一个点,我们可以求出它不通电的概率,然后再用1去减就可以了。(求不通电的概率比较简单)

有了大致的思路,我们就可以开始设计DP啦!

以1为根,我们开始做树形DP。

对于每一个点u,我们将其分两种情况讨论:

1、以u为根的子树无法使其通上电。

我们建立一个f数组,其中f[u]表示以u为根的子树,无法使u通上电的概率。

那么对于每一个u的儿子v,它不能使u通电又有两种情况:

a、它的儿子v不通电。

b、v通电,但是连接u,v的边不导电。

所以:f[u]=(1-p[u])∏v∈u's son(f[v]+(1-f[v])*(1-P[u,v]))          其中P表示u,v通电的概率

注意:因为a,b两种情况是互斥的两种情况所以f[v]和(1-f[v])*(1-P[u,v])应相加,而对于每一个v无论是哪一个v使u通电都一样,他们是独立的,所以是相乘。

2、u的父亲无法使u通上电。

这种情况,这,这,这——这TM玩个鸡儿啊!!!

万念俱灰,推出了一个看似完美的DP但最终仍是难逃被题目蹂躏的命运。

这第二种情况应该怎么处理呢?怎么处理呢?不会啊,怎么办呢?——不会那就不处理呗!!!

我们都知道,在一棵树中,有一个叫做根节点的神奇玩意儿——它是没有父亲的!

所以再不济,我们以每一个节点为根跑一遍上面的DP不就完事儿了吗!

但是我们真的需要这么做吗?——肯定不用啊!

一遍DP之后得到的大好信息,我们怎么能说扔就扔了呢?浪费可耻啊!

我们建立数组g,其中g[u]为以u为根节点,点u不被充电的概率,显然f[1]=g[1]。

那么我们考虑节点v(v为1号节点的一个儿子),再设一个x为以1为根节点的树,不算儿子v对于1号节点的影响,1号节点不被充电的概率。

那么:g[v]=f[v]*(x+(1-x)*(1-P[1,v]))

而x也很好求,因为对于1号节点的每一个儿子节点,他们对于一号节点的影响都是相对独立的,所以x=g[1]/(f[v]+(1-f[v])*(1-P[1,v]))。

所以整个g数组的转移就被我们推导出来啦!即:g[v]=f[v]*(x+(1-x)*(1-P[u,v]))   其中:x=g[u]/(f[v]+(1-f[v])*(1-P[u,v]))

代码:

var
next,head,vet:array[1..1000000]of longint;
vis:array[1..500000]of boolean;
p,f,dist,g:array[1..1000000]of double;
tot,i,n,x,y:longint;
ans,z:double;
procedure add(x,y:longint;z:real);
begin
inc(tot);
next[tot]:=head[x];
vet[tot]:=y;
head[x]:=tot;
dist[tot]:=z;
end;
procedure dfs(u:longint);
var
i,v:longint;
begin
vis[u]:=true; i:=head[u];
while i<>0 do
begin
v:=vet[i];
if not vis[v] then
begin
dfs(v);
f[u]:=f[u]*(f[v]+(1-f[v])*(1-dist[i]));
end;
i:=next[i];
end;
end;
procedure change(u:longint);
var
i,v:longint;
x:double;
begin
vis[u]:=true; i:=head[u];
while i<>0 do
begin
v:=vet[i];
if not vis[v] then
begin
x:=g[u]/(f[v]+(1-f[v])*(1-dist[i]));
g[v]:=f[v]*(x+(1-x)*(1-dist[i]));
change(v);
end;
i:=next[i];
end;
end;
begin
read(n);
for i:=1 to n-1 do
begin
read(x,y,z);
add(x,y,z/100); add(y,x,z/100);
end;
for i:=1 to n do
begin
read(p[i]);
p[i]:=p[i]/100;
f[i]:=1-p[i];
end;
dfs(1);
g[1]:=f[1];
fillchar(vis,sizeof(vis),false);
change(1);
for i:=1 to n do
ans:=ans+1-g[i]; 
writeln(ans:0:6);
end.

SHOI 2014 【概率充电器】的更多相关文章

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

    传送门 Description SHOI 概率充电器由 n-1 条导线连通了 n 个充电元件.进行充电时,每条导线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率决定. 随后电能可以 ...

  2. [ SHOI 2014 ] 概率充电器

    \(\\\) \(Description\) 一个含\(N\)个元器件的树形结构充电器,第\(i\)个元器件有\(P_i\)的概率直接从外部被充电,连接\(i,j\)的边有\(P_{i,j}\)的概率 ...

  3. 解题:SHOI 2014 概率充电器

    题面 显然就是在求概率,因为期望乘的全是1....然后就推推推啊 设$fgg[i]$表示这个点父亲没给他充上电的概率,$sgg[i]$表示这个点子树(和它自己)没给他充上电的概率,然后这个点没充上电的 ...

  4. BZOJ 3566: [SHOI2014]概率充电器( 树形dp )

    通过一次dfs求出dp(x)表示节点x考虑了x和x的子树都没成功充电的概率, dp(x) = (1-p[x])π(1 - (1-dp[son])*P(edge(x, son)).然后再dfs一次考虑节 ...

  5. bzoj 3566: [SHOI2014]概率充电器

    Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器:"采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率 ...

  6. [SHOI2014]概率充电器

    Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器: “采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器, ...

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

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  8. [SHOI2014]概率充电器(概率+换根dp)

    著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品—— 概率充电器: “采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决 定!SHOI 概率充电器,您生活不可或缺的必需品 ...

  9. BZOJ3566: [SHOI2014]概率充电器 树形+概率dp

    3566: [SHOI2014]概率充电器 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 1888  Solved: 857[Submit][Stat ...

  10. 洛谷 P4284 [SHOI2014]概率充电器 解题报告

    P4284 [SHOI2014]概率充电器 题目描述 著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完 ...

随机推荐

  1. 读Twinsen的深入探索透视投影变换

    2017.10.16更新,分割线下面是以前的文字,有表达的意思,却言不达意,实属羞耻,看官只需看前面文字即可. Twinsen大神的<深入探索透视投影变换>有几个点说得不够清晰,我这里提一 ...

  2. 【问题】【SpringBoot】记一次springboot框架下用jackson解析RequestBody失败的问题

    最近项目中遇到了一个问题,费好大劲才发现问题所在,并且修复了问题,下面分享一下这个问题的定位和修复的新路旅程. 先说下背景:该项目用的是SpringBoot框架,主要功能为对外提供一些Restful ...

  3. 重学Ajax

    什么是Ajax Asynchronous JavaScript and xml 异步的JavaScript和XML 只是一种js的应用,在无需重新加载整个网页的情况下实现部分网页的数据更新的技术.减少 ...

  4. Tomcat +Nginx+Redis实现session共享

    一.准备工作 中间件:Tomcat.Redis.Nginx jar包:commons-pool2-2.4.2.jar.jedis-2.8.0.jar.tomcat-redis-session-mana ...

  5. 认证授权:IdentityServer4 - 各种授权模式应用

    前言: 前面介绍了IdentityServer4 的简单应用,本篇将继续讲解IdentityServer4 的各种授权模式使用示例 授权模式: 环境准备 a)调整项目结构如下:   b)调整cz.Id ...

  6. CTF-WeChall-第四天上午

    2020.09.12 08:24 哈哈,go on!

  7. 原生js实现懒加载并节流

    像淘宝网站等,页面中有着大量图片,一次性全部加载这些图片会使浏览器发送大量请求和造成浪费.采用懒加载技术,即用户浏览到哪儿,就加载该处的图片.这样节省网络资源.提升用户体验.减少服务器压力. 方法1: ...

  8. 【Flutter 实战】文件系统目录

    老孟导读:Flutter 中获取文件路径,我们都知道使用 path_provider,但对其目录对含义不是很清楚,此文介绍 Android.iOS 系统的文件目录,不同场景下建议使用的目录. 不同的平 ...

  9. openstack核心组件——horizon Web管理界面(10)

    一.horizon 介绍: 理解 horizon Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashBoard 服务 ...

  10. pxe+kickstart无人值守批量安装linux

    一.原理和概念: 1.PXE:         PXE 并不是一种安装方式,而是一种引导的方式.进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 ...