time limit per test1 second

memory limit per test256 megabytes

inputstandard input

outputstandard output

Barney lives in country USC (United States of Charzeh). USC has n cities numbered from 1 through n and n - 1 roads between them. Cities and roads of USC form a rooted tree (Barney’s not sure why it is rooted). Root of the tree is the city number 1. Thus if one will start his journey from city 1, he can visit any city he wants by following roads.

Some girl has stolen Barney’s heart, and Barney wants to find her. He starts looking for in the root of the tree and (since he is Barney Stinson not a random guy), he uses a random DFS to search in the cities. A pseudo code of this algorithm is as follows:

let starting_time be an array of length n

current_time = 0

dfs(v):

current_time = current_time + 1

starting_time[v] = current_time

shuffle children[v] randomly (each permutation with equal possibility)

// children[v] is vector of children cities of city v

for u in children[v]:

dfs(u)

As told before, Barney will start his journey in the root of the tree (equivalent to call dfs(1)).

Now Barney needs to pack a backpack and so he wants to know more about his upcoming journey: for every city i, Barney wants to know the expected value of starting_time[i]. He’s a friend of Jon Snow and knows nothing, that’s why he asked for your help.

Input

The first line of input contains a single integer n (1 ≤ n ≤ 105) — the number of cities in USC.

The second line contains n - 1 integers p2, p3, …, pn (1 ≤ pi < i), where pi is the number of the parent city of city number i in the tree, meaning there is a road between cities numbered pi and i in USC.

Output

In the first and only line of output print n numbers, where i-th number is the expected value of starting_time[i].

Your answer for each city will be considered correct if its absolute or relative error does not exceed 10 - 6.

Examples

input

7

1 2 1 1 4 4

output

1.0 4.0 5.0 3.5 4.5 5.0 5.0

input

12

1 1 2 2 4 4 3 3 1 10 8

output

1.0 5.0 5.5 6.5 7.5 8.0 8.0 7.0 7.5 6.5 7.5 8.0

【题解】



题意:在树上进行dfs,从1节点开始dfs获取时间戳,每次dfs的时候搜的是任意一个儿子节点(每个节点搜到概率相同),求每个儿子的时间戳的期望;



首先1号节点的时间戳肯定是1.

ans[1] = 1;

然后我们考虑上图中1号节点的一个儿子节点3;

则有以下6种搜索的顺序

(它的子树就不写出来了)

1 2 3 4 ···①

1 2 4 3 ···②

1 3 2 4 ···③

1 3 4 2 ···④

1 4 2 3 ···⑤

1 4 3 2 ···⑥

(以下size[x]表示以x为根节点的子树的节点个数)

先让ans[3] = ans[1];

然后

③和④都是直接一步到达三号节点的,则增加量为2;

①则增加了size[2]+1,

②则增加了size[2]+size[4]+1;

⑤增加了size[4]+size[2]+1;

⑥增加了size[4]+1;

所以ans[3]+= (2+1+1+1+1 + 3*size[2] + 3*size[4])/6;

(除6可以这样理解,每种增加量的概率都是1/6)

再多观察一下。可以发现A(3,3)的所有排列中,所有1的直系儿子节点中除了3号节点外,其他节点在3号节点前面的概率都是1/2;

设3号节点的兄弟节点为a1,a2;

则我们最后ans[3]+= x

则x必然是 t1*size[a1] + t2*size[a2]+6 的形式

6可以理解吧?->这个常熟肯定是等于A(3,3)的

那么t1和t2的系数是多少呢?

“除了3号节点外,其他节点在3号节点前面的概率都是1/2”

根据这句话可以知道,那些系数t1,t2肯定都是相同的且为A(3,3)/2;

这样除下去就是1/2了。

所以归纳一下

ans[x] = ans[x的父亲节点] + (∑size[兄弟节点])/2 + 1

#include <cstdio>
#include <vector>
#include <iostream> using namespace std; const int MAXN = 2e5; int n, cnt[MAXN] = { 0 };
double ans[MAXN] = { 0 };
vector <int> a[MAXN]; void input(int &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
} void dfs(int x)
{
cnt[x] = 1;
int len = a[x].size();
for (int i = 0; i <= len - 1; i++){
int y = a[x][i];
dfs(y);
cnt[x] += cnt[y];
}
} void get_ans(int x)
{
int len = a[x].size();
for (int i = 0; i <= len - 1; i++){
int y = a[x][i];
ans[y] = ans[x] + 1.0 + ((cnt[x] - cnt[y] - 1)*1.0) / 2.0; //父亲节点的大小减去这y节点的大小再减去父亲节点本身,就是y的兄弟节点的大小了。
get_ans(y);
}
} int main()
{
//freopen("F:\\rush.txt", "r", stdin);
input(n);
for (int i = 2; i <= n; i++){
int x;
input(x);
a[x].push_back(i);
}
dfs(1);
ans[1] = 1.0;
get_ans(1);
for (int i = 1; i <= n; i++)
printf("%.1lf%c", ans[i],i==n?'\n':' ');
return 0;
}

【64.52%】【codeforces 697D】Puzzles的更多相关文章

  1. 【 BowWow and the Timetable CodeForces - 1204A 】【思维】

    题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...

  2. 【52.49%】【codeforces 556A】Case of the Zeros and Ones

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  3. 【25.64%】【codeforces 570E】Pig and Palindromes

    time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  4. 【44.64%】【codeforces 743C】Vladik and fractions

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  5. 【codeforces 514E】Darth Vader and Tree

    [题目链接]:http://codeforces.com/problemset/problem/514/E [题意] 无限节点的树; 每个节点都有n个儿子节点; 且每个节点与其第i个节点的距离都是ai ...

  6. 【74.00%】【codeforces 747A】Display Size

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  7. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  8. 【搜索】【并查集】Codeforces 691D Swaps in Permutation

    题目链接: http://codeforces.com/problemset/problem/691/D 题目大意: 给一个1到N的排列,M个操作(1<=N,M<=106),每个操作可以交 ...

  9. 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)

    题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...

随机推荐

  1. Dcloud课程2 什么是Dcloud

    Dcloud课程2  什么是Dcloud 一.总结 一句话总结:DCloud提供了一套快速开发应用的跨平台技术方案. 1.DCloud的产品架构? MUI+(H5+)+HBuilder 2.什么是MU ...

  2. amazeui学习笔记--css(HTML元素5)--表格Table

    amazeui学习笔记--css(HTML元素5)--表格Table 一.总结 1.基本样式:am-table:直接模块名  <table class="am-table"& ...

  3. 关于python的深浅拷贝、赋值

    https://blog.csdn.net/weixin_39750084/article/details/81435454

  4. hdu 3416 Marriage Match IV (最短路+最大流)

    hdu 3416 Marriage Match IV Description Do not sincere non-interference. Like that show, now starvae ...

  5. Codeforces Round #234 (Div. 2):B. Inna and New Matrix of Candies

    B. Inna and New Matrix of Candies time limit per test 1 second memory limit per test 256 megabytes i ...

  6. java測试网络连接是否成功并设置超时时间

    /** * 获取RMI接口状态 * * @return "0":服务正常,"1": 连接报错,"2":连接超时 */ @Override p ...

  7. ANDROID内存优化(大汇总——全)

    写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...

  8. goland 2018.2 激活

    感谢 http://blog.sina.com.cn/s/blog_1885d23df0102ydjc.html http://www.3322.cc/soft/38102.html 下载   htt ...

  9. js中json数据简单处理(JSON.parse()和js中嵌套html)

    js中json数据简单处理(JSON.parse()和js中嵌套html) 一.总结 1.html中嵌套js:<script>js代码</script> 2.js中嵌套html ...

  10. 在Linux上安装及配置MariaDB

    安装MariaDB 1.切换到root用户,首先执行rpm -qa | grep -i mysql检查一下是否有已安装的与MySQL相关的东西,如果有,使用rpm -e --nodeps mysql* ...