期望计算的套路:

1、定义:算出所有测试值的和,除以测试次数。

2、定义:算出所有值出现的概率与其乘积之和。

3、用前一步的期望,加上两者的期望距离,递推出来。

题意:

一个树,dfs遍历子树的顺序是随机的。所对应的子树的dfs序也会不同。输出每个节点的dfs序的期望

 

思路:

分析一颗子树:

当前已知节点1的期望为1.0 ->anw[1]=1.0

需要通过节点1递推出节点2、4、5的期望值

1的儿子分别是2、4、5,那么dfs序所有可能的排列是6种:

1:1-2-4-5  (2、4、5节点的儿子没有写出)

2:1-2-5-4

3:1-4-2-5

4:1-4-5-2

5:1-5-2-4

6:1-5-4-2

计算节点2的期望值得时候,当节点2的前面已经排列了num个点,那么节点2的dfs序就要增加num

所以anw[2]的计算分为两部分,第一部分是:anw[2]=anw[1]+1  (节点1通过1步直接到达儿子2、4、5)

第二部分是:当节点1到达节点2的时候贡献是0,种类分别对应(1、2)

      当先到达节点4后到节点2的时候贡献(size(4)+size(4)+szie(5)),种类分别对应(3、4)

      当先到达节点5后到节点2的时候贡献(size(5)+size(5)+size(4)),种类分别对应(5、6)

而所有的排列对于的概率都是1/6,所以第二部分的贡献就是(0+size(4)*3+size(5)*3)/6 = (size(4)+size(5))/2

仔细推理几颗子树之后:发现anw[v]=anw[u]+1.0+(sz[u]-sz[v]-1)/2.0。

anw[u]+1.0对应第一部分  (sz[u]-sz[v]-1)/2.0 表示的是当前能排在节点v前面的u的儿子的总数  *  0.5

对比1-6的6种排列,任意儿子a、b  ,满足a在b前面的概率是0.5  

转自http://blog.csdn.net/libin66/article/details/51918509

代码懒得写了,转自同源:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
#include <ctime>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<iomanip>
#include<cmath>
#define mst(ss,b) memset((ss),(b),sizeof(ss))
#define maxn 0x3f3f3f3f
#define MAX 1000100
///#pragma comment(linker, "/STACK:102400000,102400000")
typedef long long ll;
typedef unsigned long long ull;
#define INF (1ll<<60)-1
using namespace std;
int n;
struct edge{
int v,next;
}e[500100];
int head[100100],tot=0;
void Add(int u,int v){
e[tot].v=v;
e[tot].next=head[u];
head[u]=tot++;
}
int sz[100100];
void DFS(int u,int fa){
sz[u]=1;
for(int i=head[u];i!=-1;i=e[i].next){
int v=e[i].v;
if(v==fa) continue;
DFS(v,u);
sz[u]+=sz[v];
}
}
double anw[100100];
void DFS1(int u,int fa){
for(int i=head[u];i!=-1;i=e[i].next){
int v=e[i].v;
if(v==fa) continue;
anw[v]=anw[u]+1.0+(sz[u]-sz[v]-1)*1.0/2.0;
DFS1(v,u);
}
}
int main(){
mst(head,-1);
scanf("%d",&n);
for(int i=2;i<=n;i++){
int x;
scanf("%d",&x);
Add(x,i);
Add(i,x);
}
DFS(1,0);
anw[1]=1.0;
DFS1(1,0);
for(int i=1;i<=n;i++) printf("%.2f ",anw[i]);
return 0;
}

【转载】【树形DP】【数学期望】Codeforces Round #362 (Div. 2) D.Puzzles的更多相关文章

  1. Codeforces Round #362 (Div. 2) D. Puzzles

    D. Puzzles time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  2. D. Puzzles(Codeforces Round #362 (Div. 2))

    D. Puzzles Barney lives in country USC (United States of Charzeh). USC has n cities numbered from 1 ...

  3. Codeforces Round #362 (Div. 2) C. Lorenzo Von Matterhorn (类似LCA)

    题目链接:http://codeforces.com/problemset/problem/697/D 给你一个有规则的二叉树,大概有1e18个点. 有两种操作:1操作是将u到v上的路径加上w,2操作 ...

  4. #map+LCA# Codeforces Round #362 (Div. 2)-C. Lorenzo Von Matterhorn

    2018-03-16 http://codeforces.com/problemset/problem/697/C C. Lorenzo Von Matterhorn time limit per t ...

  5. Codeforces Round #362 (Div. 2) A.B.C

    A. Pineapple Incident time limit per test 1 second memory limit per test 256 megabytes input standar ...

  6. Codeforces Round #362 (Div. 2)->B. Barnicle

    B. Barnicle time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  7. Codeforces Round #362 (Div. 2)->A. Pineapple Incident

    A. Pineapple Incident time limit per test 1 second memory limit per test 256 megabytes input standar ...

  8. Codeforces Round #362 (Div. 2) B 模拟

    B. Barnicle time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  9. Codeforces Round #362 (Div. 2) A 水也挂

    A. Pineapple Incident time limit per test 1 second memory limit per test 256 megabytes input standar ...

随机推荐

  1. C# 导入EXCEL 报错外部表不是预期的格式错误 .

    错误经过:在读取Excel时,出现外部表不是预期的格式 错误原因1: 由于Excel 97-2003的连接格式与Excel 2010 的 不同造成. 以下是从网上摘抄原文 Excel “Externa ...

  2. asp.net LINQ防止SQL注入式攻击

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  3. 浅谈WebSocket

    WebSocket是H5提出的为了解决客户端和服务器双工通信的方法.在我们使用HTTP协议通信时,客户端主动向服务器发送请求,得到服务器端数据.为了与服务器端数据保持一致,之前常用的有轮询和长轮询两种 ...

  4. C# 解析JSON格式数据

    JSON简介 JSON(全称为JavaScript ObjectNotation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集.JSON采用完全独立于语言的文本格式,可 ...

  5. mysql workbench

    下载地址:http://dev.mysql.com/downloads/ 详情:http://baike.baidu.com/link?url=sWV3b2pWdr8cvCxEZYrB9CzLD9Bl ...

  6. OpenLDAP,一登录系统就修改密码

    http://guodayong.blog.51cto.com/263451/d-2 郭大勇的博客   1:修改配置文件 在前面打开注释 moduleload ppolicy.la modulepat ...

  7. Struts2理解--动态方法和method属性及通配符_默认Action

    众所周知,默认条件下,在浏览器输入indexAction!execute.action,便会执行indexAction类里的execute方法,这样虽然方便,但可能带来安全隐患,通过url可以执行Ac ...

  8. Windows 2012 R2图标以及字体颜色发生变化更改成默认设置

    1. 在桌面按"Win+R",然后输出regedit.2. 定位到HKEY_CURRENT_USER\Control panel\Colors3. 对照下面提供给您的初始化颜色的注 ...

  9. [goa]golang微服务框架学习(三)-- 使用swagger-ui展示API

    既然goa框架自动生成啦swagger-json文件,那么如何用swagger-ui展示出来呢? 这里分三步: 1.下载swagger-ui的web代码 2.添加swagger.json 和 swag ...

  10. 关于meta标签

    一.Meta标签中的format-detection属性及含义 意为:格式检测 或许你会有这样的经历:当你在制作手机端的页面中,点击了没有加任何链接的格式的数字时,这时手机会进行自动拔号提示操作! 禁 ...