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. spring boot:创建一个简单的web(maven web project)

    1.新建一个maven web project; 2.在pom.xml文件中添加相应的依赖包: 3.新建一个HelloController请求控制类: 4.编写index.jsp页面: 5.编写启动类 ...

  2. 一个表单里,如果有<button>标签存在,它会自动提交表单

    可以用button代替input type=”submit”吗? 在ie下,<button>标记恐怕还存在几个不大不小的问题. 在一个表单里,如果有一个以上"submit&quo ...

  3. [转]mysql日常工作手记

    1. 给navy加show权限: 1 2 update mysql.user set Show_db_priv='Y'  where user='navy'; flush privileges; 2. ...

  4. 20170501xlVBA销售订单整理一行转多行

    Sub NextSeven_CodeFrame() Application.ScreenUpdating = False Application.DisplayAlerts = False Appli ...

  5. Ubuntu中vi命令的编辑模式异常

    今天更改Ubuntu软件源的时候,进入源文件的编辑模式时,发现删除键和编辑都不能正常使用,百度之后,知道是由于Ubuntu预装的是vim-tiny,而我们需要使用vim-full.在此记录下该问题以便 ...

  6. svn更新产生的异常

    同步svn时差生的错误如下:   同步 SVNStatusSubscriber 时报告了错误.1 中的 0 个资源已经同步. 同步 /tunnel14 时发生错误:Error getting stat ...

  7. Executors类的newFixedThreadPool, newCachedThreadPool, newScheduledThreadPool

    Executors 类对 ThreadPoolExecutor 的构造函数进行了封装,使用该类可方便地创建线程池. 1. newFixedThreadPool public static Execut ...

  8. UVALive 5107 dfs暴力搜索

    题目链接:A hard Aoshu Problem DES:给三个字符串,包含的字符是A-E范围内的.长度都不超过8.每个字符可以而且只可以匹配一个数字.两个字符不能匹配相同的数字.前两个式子之间可以 ...

  9. UVALive 5844 dfs暴力搜索

    题目链接:UVAive 5844 Leet DES:大意是给出两个字符串.第一个字符串里的字符可以由1-k个字符代替.问这两个字符串是不是相等.因为1<=k<=3.而且第一个字符串长度小于 ...

  10. json添加数据

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...