题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3566

一眼看上去高斯消元。n^3不行。

竟然直接去看了TJ。发现树型dp。一下想到了自己还没做出的bzoj2878。当然是up和down啦~

然后无限TLE。看看TJ,发现:

  这个不能直接加的!应该是  自己不亮的概率*它让自己亮的概率  累加到原来亮的概率上!

然后还是无限TLE。

最后发现是N=5e5。应该是N=5e5+5。

PS:因为是那样加的,所以算up的时候不好减;学题解写了前缀和。仔细一想也可以随便解一次方程得出减后的值。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=5e5+;
int n,head[N],xnt,stack[N],top;
double e[N],q[N],up[N],dn[N],ans,sum[][N];//
struct Edge{
int next,to;double w;
Edge(int n=,int t=,double k=0.0):next(n),to(t),w(k) {}
}edge[N<<];
void add(int x,int y,double z)
{
edge[++xnt]=Edge(head[x],y,z);head[x]=xnt;
edge[++xnt]=Edge(head[y],x,z);head[y]=xnt;
}
double pls(double x,double y){return x+y-x*y;}//x+(1-x)*y
void dfs1(int cr,int f)
{
for(int i=head[cr],v;i;i=edge[i].next)
if((v=edge[i].to)!=f)
{
dfs1(v,cr);
dn[cr]=pls(dn[cr],pls(dn[v],q[v])*edge[i].w);
}
}
void dfs2(int cr,int f)
{
up[cr]=pls(up[cr],q[cr]);
ans+=pls(up[cr],dn[cr]);
top=;
for(int i=head[cr];i;i=edge[i].next)
if(edge[i].to!=f)
{stack[++top]=edge[i].to;e[top]=edge[i].w;}
sum[][]=;sum[][top+]=;//
for(int i=;i<=top;i++)sum[][i]=pls(sum[][i-],pls(dn[stack[i]],q[stack[i]])*e[i]);
for(int i=top;i;i--)sum[][i]=pls(sum[][i+],pls(dn[stack[i]],q[stack[i]])*e[i]);
for(int i=;i<=top;i++)up[stack[i]]=pls(pls(sum[][i-],sum[][i+]),up[cr])*e[i];
for(int i=head[cr];i;i=edge[i].next)
if(edge[i].to!=f)dfs2(edge[i].to,cr);
}
int main()
{
scanf("%d",&n);int x,y;double z;
for(int i=;i<n;i++)
{
scanf("%d%d%lf",&x,&y,&z);
add(x,y,z/);
}
for(int i=;i<=n;i++)scanf("%lf",&q[i]),q[i]/=;
dfs1(,);dfs2(,);
printf("%.6lf\n",ans);
return ;
}

bzoj 3566 [SHOI2014]概率充电器——树型的更多相关文章

  1. BZOJ 3566: [SHOI2014]概率充电器 [树形DP 概率]

    3566: [SHOI2014]概率充电器 题意:一棵树,每个点\(q[i]\)的概率直接充电,每条边\(p[i]\)的概率导电,电可以沿边传递使其他点间接充电.求进入充电状态的点期望个数 糖教题解传 ...

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

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

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

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

  4. ●BZOJ 3566 [SHOI2014]概率充电器

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3566题解: 概率dp,树形dp 如果求出每个点被通电的概率t, 那么期望答案就是t1×1+t ...

  5. BZOJ.3566.[SHOI2014]概率充电器(概率DP 树形DP)

    BZOJ 洛谷 这里写的不错,虽然基本还是自己看转移... 每个点的贡献都是\(1\),所以直接求每个点通电的概率\(F_i\),答案就是\(\sum F_i\). 把\(F_x\)分成:父节点通电给 ...

  6. bzoj 3566: [SHOI2014]概率充电器 数学期望+换根dp

    题意:给定一颗树,树上每个点通电概率为 $q[i]$%,每条边通电的概率为 $p[i]$%,求期望充入电的点的个数. 期望在任何时候都具有线性性,所以可以分别求每个点通电的概率(这种情况下期望=概率 ...

  7. bzoj 3566: [SHOI2014]概率充电器【树形概率dp】

    设g[u]为这个点被儿子和自己充上电的概率,f[u]为被儿子.父亲和自己充上电的概率 然后根据贝叶斯公式(好像是叫这个),1.P(A+B)=P(A)+P(B)-P(A)*P(B),2.P(A)=(P( ...

  8. BZOJ 3566 [SHOI2014]概率充电器 ——期望DP

    期望DP. 补集转化,考虑不能被点亮的情况, 然后就是三种情况,自己不能亮,父亲不能点亮它,儿子不能点亮它. 第一次计算比较容易,第二次计算的时候需要出去第一次的影响,因为一条线只能传导一次 #inc ...

  9. 【BZOJ 3566】 3566: [SHOI2014]概率充电器 (概率树形DP)

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

随机推荐

  1. idea中如何debug本地maven项目

    方法一:使用maven中的jetty插件调试本地maven项目 1.打断点 2.右击“jetty:run”,选择Debug运行 3.浏览器发送http请求,开始调试 方法二:利用远程调试功能调试本地m ...

  2. hi.baidu.com 百度流量统计

    在字幕侠的官网访问之后,发现 <meta name="baidu-site-verification" content="3uvZd9Aact" /> ...

  3. Linux下 split 划分文件 和 cat 合并文件

    split 命令 split 命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等. 选项 -b:值为每一输出档案的大小,单位为 byte. -C:每一 ...

  4. Search a 2D Matrix,在有序矩阵查找,二分查找的变形; 行有序,列有序查找。

    问题描述:矩阵每一行有序,每一行的最后一个元素小于下一行的第一个元素,查找. 算法分析:这样的矩阵其实就是一个有序序列,可以使用折半查找算法. public class SearchInSortedM ...

  5. js进阶---12-12、jquery事件委托怎么使用

    js进阶---12-12.jquery事件委托怎么使用 一.总结 一句话总结:通过on方法(事件委托),给要绑定事件的元素的祖先绑定事件,从而达到效果. 1.事件委托是什么? 通过事件冒泡,让子元素绑 ...

  6. 三十九 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本概念

    elasticsearch的基本概念 1.集群:一个或者多个节点组织在一起 2.节点:一个节点是集群中的一个服务器,由一个名字来标识,默认是一个随机的漫微角色的名字 3.分片:将索引(相当于数据库)划 ...

  7. django model_fields_validators 前端页面编辑自定义验证

    # model_field_validators.py import re from django.core.exceptions import ValidationError from django ...

  8. Activity传递参数——传递简单数据

    一.新建一个空的工程 二.在主界面中添加一个按钮 三.新建一个空的activity,并命名为TheAty 四.修改MainActivity.java中的onCreate函数 protected voi ...

  9. 《Drools7.0.0.Final规则引擎教程》第4章 4.2 auto-focus

    auto-focus 在agenda-group章节,我们知道想要让AgendaGroup下的规则被执行,需要在代码中显式的设置group获得焦点.而此属性可配合agenda-group使用,代替代码 ...

  10. c++ 字符串查找函数

    头文件:#include <string.h> 定义函数:int strcasecmp (const char *s1, const char *s2); 函数说明:strcasecmp( ...