首先很好想到要用树形 \(dp\)。

然后设 \(dp_i\) 为遍历到第 \(i\) 个点的期望时间,\(sz_i\) 代表 \(i\) 的子树大小。

发现有转移方程:

\[dp_i=dp_{fa_i}+1+\sum\limits_{j\in fa_i且j\ne i}sz_j\times q
\]

其中 \(q\) 为一个常数,代表在排列中 \(j\) 在 \(i\) 前的概率。

很容易发现 \(q=\frac{1}{2}\)。

于是转移方程可优化为:

\[dp_i=dp_{fa_i}+1+\frac{sz_{fa_i}-1-sz_i}{2}
\]

时间复杂度 \(O(n)\)。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll p=998244353;
const int N=100005;
int n,m,sz[N];
double dp[N];
int h[N],to[N],nxt[N];
void add(int x,int y){
to[++m]=y;
nxt[m]=h[x];
h[x]=m;
}void dfs1(int x){
for(int i=h[x];i;i=nxt[i]){
dfs1(to[i]);
sz[x]+=sz[to[i]];
}sz[x]++;
}void dfs2(int x){
for(int i=h[x];i;i=nxt[i]){
dp[to[i]]=dp[x]+1+1.0*(sz[x]-1-sz[to[i]])/2.0;
dfs2(to[i]);
}
}int main(){
cin>>n;
for(int i=2;i<=n;i++){
int fa;
cin>>fa;
add(fa,i);
}dfs1(1);
dp[1]=1;
dfs2(1);
for(int i=1;i<=n;i++)
printf("%.1lf ",dp[i]);
return 0;
}

[CF696B] Puzzles 题解的更多相关文章

  1. CF696B Puzzles 期望

    显然可以树形$dp$ 令$f[i]$表示$i$号节点的期望时间戳 不妨设$fa$有$k$个子节点,对于$i$的子节点$u$,它是第$j(1 \leqslant j \leqslant k)$个被访问的 ...

  2. POJ1204:Word Puzzles——题解

    http://poj.org/problem?id=1204 题目大意:给一个字母表,求一些字符串的开端第一次出现的位置和字符串的方向(字符串可以按照八个方向放在字母表中可匹配的位置) ——————— ...

  3. CF696B Puzzles 概率期望

    有一棵树,共有 $N$ 个节点,他会使用下列 $DFS$ 算法对该树进行遍历: starting_time是一个容量为n的数组current_time = 0dfs(v): current_time ...

  4. CF696B Puzzles(期望dp)

    传送门 解题思路 比较有意思的一道题.首先假如这个点\(x\)只有\(1\)个儿子\(u\),那么显然可得\(dp[u]=dp[x]+1\).继续如果多加一个儿子\(p\),那么\(p\)在\(u\) ...

  5. 【CF696B】Puzzles(树形DP,期望)

    题意:n 个节点的树,初始位置为 1 号节点,初始时间为 1.每次随机地走向任何一个没有走过的子树并且令时间 +1求问走到每一个点时的时间的期望值 思路:比较少见的一道自顶向下的树形DP dp[i]表 ...

  6. codeforces 377A. Puzzles 水题

    A. Puzzles Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/problem/33 ...

  7. 《algorithm puzzles》——概述

    这个专题我们开始对<algorithm puzzles>一书的学习,这本书是一本谜题集,包括一些数学与计算机起源性的古典命题和一些比较新颖的谜题,序章的几句话非常好,在这里做简单的摘录. ...

  8. Puzzles

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

  9. HDU1043 Eight(八数码:逆向BFS打表+康托展开)题解

    Eight Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  10. Codeforces Round #196 (Div. 2) A. Puzzles 水题

    A. Puzzles Time Limit: 2 Sec  Memory Limit: 60 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/showProblem ...

随机推荐

  1. docker 下载镜像配置

    现在docker 安装镜像的时候,会发现下载不了镜像. 有网友提供了一些可用的镜像,亲测可用. { "registry-mirrors": [ "https://dock ...

  2. 使用阿里的ARTHAS跟踪方法耗时

    使用命令跟踪一个方法的耗时 在arthas 命令行下输入命令 trace 类全路径 监控的方法 trace com.redxun.bpm.core.service.BpmInstServiceImpl ...

  3. uni app 封装接api接口

    创建文件  base.js let baseURL = ''; // 是否在控制台显示接口请求日志,本地环境启用,打包环境禁用 let showHttpLog = false; // 测试环境 bas ...

  4. OpenEuler安装MongoDB并配置访问密码

    1. 下载MongoDB.安装 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.4.18.tgz tar zxv ...

  5. 2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有 n 名魔法师排成一列。每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量。 你被施加了一种诅咒,吸

    2024-12-21:从魔法师身上吸取的最大能量.用go语言,在一个神秘的地牢里,有 n 名魔法师排成一列.每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量. 你被施加了一种诅咒,吸 ...

  6. 解决httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0

    httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for Se ...

  7. Mybatis-plus关于代码生成器的使用

    1.添加依赖 2.在test包下创建一个CodeGet类,实现生成代码的功能.注意:全局配置.数据源配置一定要和自己的电脑配置一致! 3.执行CodeGet类中的main方法.打印台有如下图提示字样, ...

  8. Datawhale冬令营第二期!😀Task 1

    Datawhale冬令营第二期-Task1:动手体验AI辅助编程:番茄钟 对应链接:https://www.datawhale.cn/activity/116/23/94?rankingPage=1 ...

  9. 微信Windows端IM消息数据库的优化实践:查询慢、体积大、文件损坏等

    本文由微信客户端技术团队工程师"Jon"分享,原题"Windows微信:消息数据库架构演进",有较多修订. 1.引言 本文分享的是,微信客户端团队基于对微信用户 ...

  10. API接口请求小结

    API接口请求小结 一.python: API接口请求 1.1 multipart/form-data类型请求 参数类型:数组 1.2 multipart/form-data类型请求 参数类型:文件流 ...