LINK


题目大意

一棵树,上面的每个点都有一定概率成为起点和终点

从起点出发,随机游走,并按照下列规则统计count:

DFS(x)
if x == exit vertex then
finish search
flag[x] <- TRUE
random shuffle the vertices' order in V(x) // here all permutations have equal probability to be chosen
for i <- 1 to length[V] do
if flag[V[i]] = FALSE then
count++;
DFS(y);
count++;

求count的期望


思路

首先来证明一个东西:

对于每个节点u,如果这个节点是终点,那么他的贡献是

\[\sum_{(u,v)\in E}siz_v*sump_v
\]

\(sump_v\)是子树内每个节点作为起始节点的概率和

首先我们把一个以u为根子树拿出来,对于其中的每一个点v

如果起始节点s在v的子树内,v一定会被经过1次,贡献\(p_s\)

如果s不在v的子树内,v有\(\frac{1}{2}\)的概率会被经过,贡献\(p_s*2*\frac{1}{2}=p_s\)

不被经过的贡献是\(0\)

然后来证为为什么有\(\frac{1}{2}\)的概率被经过

从s开始进入每个子树,要么遍历完,要么停下来

所以可以认为任何一个子树在停下来之前被访问的概率都是\(\frac{1}{2}\)

然后这题做完了。。。泪奔ing


#include<bits/stdc++.h>

using namespace std;

typedef double db;

const int N = 1e5 + 10;

int n, siz[N];
vector<int> g[N];
db p[N], q[N], sump = 0, sumq = 0, ans; void dfs(int u, int fa) {
siz[u] = 1;
for (auto v : g[u]) {
if (v == fa) continue;
dfs(v, u);
siz[u] += siz[v];
p[u] += p[v];
ans += q[u] * siz[v] * p[v];
}
ans += q[u] * (n - siz[u]) * (sump - p[u]);
} int main() {
scanf("%d", &n);
for (int i = 1; i < n; i++) {
int u, v;
scanf("%d %d", &u, &v);
g[u].push_back(v);
g[v].push_back(u);
}
for (int i = 1; i <= n; i++) {
scanf("%lf %lf", &p[i], &q[i]);
sump += p[i], sumq += q[i];
}
dfs(1, 0);
printf("%.15lf", ans / (sump * sumq));
return 0;
}

Codeforces123E. Maze【树形dp】【概率dp】【证明题】的更多相关文章

  1. SGU 495 Kids and Prizes:期望dp / 概率dp / 推公式

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=495 题意: 有n个礼物盒,m个人. 最开始每个礼物盒中都有一个礼物. m个人依次随 ...

  2. BZOJ3566 [SHOI2014]概率充电器 (树形DP&概率DP)

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

  3. [LOJ3124][CTS2019|CTSC2019]氪金手游:树形DP+概率DP+容斥原理

    分析 首先容易得出这样一个事实,在若干物品中最先被选出的是编号为\(i\)的物品的概率为\(\frac{W_i}{\sum_{j=1}^{cnt}W_j}\). 假设树是一棵外向树,即父亲比儿子先选( ...

  4. 初涉期望dp/概率dp【在更】

    大致可以分为两种:爆精度:小数取模.

  5. bzoj 1076: [SCOI2008]奖励关【状压dp+概率dp】

    设f[i][s]为前i步,选的礼物集合为s的方案数,然而并不会转移-- 看了hzwer的blog,发现要倒着转移,然后答案就是f[1][0] 妙啊 #include<iostream> # ...

  6. [NOIP2016 D1T3]换教室 【floyd+概率dp】

    题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq i \leq n1≤ ...

  7. 13年山东省赛 The number of steps(概率dp水题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud The number of steps Time Limit: 1 Sec  Me ...

  8. 【BZOJ 2878】 2878: [Noi2012]迷失游乐园 (环套树、树形概率DP)

    2878: [Noi2012]迷失游乐园 Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m ...

  9. A Dangerous Maze (II) LightOJ - 1395(概率dp)

    A Dangerous Maze (II) LightOJ - 1395(概率dp) 这题是Light Oj 1027的加强版,1027那道是无记忆的. 题意: 有n扇门,每次你可以选择其中一扇.xi ...

随机推荐

  1. windows下的mongodb安装(真垃圾)

    一.下载 3.6下载安装会卡死.只能下3.4的.http://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-v3.4-la ...

  2. js 数组的删除

    var test=[1,2,1,2,3,4,5,6,7]; 1.remove test.remove(1)     位置 test.remove(-2) test.remove(2,3) 2 dele ...

  3. canvas和图片之间的互相装换

    canvas和图片之间的互相装换 一.总结 一句话总结:一个是canvas的drawImage方法,一个是canvas的toDataURL方法 canvas drawImage() Image对象 c ...

  4. mybatis: 多对多查询[转]

    加入3个包 log4j-1.2.17.jar mybatis-3.3.0.jar mysql-connector-java-5.1.8.jar log4j需要配置 log4j.properties # ...

  5. Confluence 6 嵌套用户组的备注

    潜在的性能影响.启用嵌套用户组可能会减慢用户查找的速度. 在 LDAP 中定义嵌套用户组.在 LDAP 中,一个嵌套用户组是 DN (Distinguished Name)的子用户组,这个字用户组将会 ...

  6. 在centos7上安装gcc、node.js(源码下载)

    一.在centos7中安装node.js https://www.cnblogs.com/lpbottle/p/7733397.html 1.从源码下载Nodejs cd /usr/local/src ...

  7. hdu1686字符串kmp

    The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e ...

  8. 2-20 MySQL集群搭建实现高可用

    MySQL集群概述和安装环境 MySQL Cluster是MySQL适合于分布式计算环境的高实用.高冗余版本.Cluster的汉语是"集群"的意思.它采用了NDB Cluster ...

  9. 组播IP地址

    组播IP地址组播IP地址用于标识一个IP组播组.IANA(internet assigned number authority)把D类地址空间分配给IP组播,其范围是从224.0.0.0到239.25 ...

  10. elasticsearch 自定义_id

    elasticsearch 自定义ID: curl -s -XPUT localhost:9200/web -d ' { "mappings": { "blog" ...