d[i]表示以第i个节点为根的树上节点个数
starting_time[i] = ans[i] = ans[j] + (d[j] - d[i] - 1) * 0.5 + 1;(j是i的父节点)
#include <bits/stdc++.h>
#define maxn 100005
#define MOD 1000000007
using namespace std;
typedef long long ll;
int d[maxn];
double ans[maxn];
vector<int> v[maxn];
void dfs(int j, int f){
d[j] = 1;
for(int i = 0; i < v[j].size(); i++){
if(f == v[j][i])
continue;
dfs(v[j][i], j);
d[j] += d[v[j][i]];
}
}
void Dfs(int j, int f){
for(int i = 0; i < v[j].size(); i++){
if(f == v[j][i])
continue;
int p = v[j][i];
ans[p] = ans[j] + (d[j] - d[p] - 1) * 0.5 + 1;
Dfs(p, j);
}
}
int main(){
// freopen("in.txt", "r", stdin);
int n, a;
scanf("%d", &n);
for(int i = 2; i <= n; i++){
scanf("%d", &a);
v[a].push_back(i);
}
dfs(1, -1);
ans[1] = 1;
Dfs(1, -1);
printf("%.1lf", ans[1]);
for(int i = 2; i <= n; i++)
printf(" %.1lf", ans[i]);
puts("");
return 0;
}