#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int N = 1e5 + 10;
const int inf = 2e9;
const double eps = 1e-7;
const long long INF = (long long)1e18;
int a[N];
double ans[N];
int s[N];
int vis[N];
vector<int> g[N];
void dfs(int x, int par) {
  vis[x] = 1;
  int y;
  s[x] = 1;
  int n = g[x].size();
  for (int i = 0; i < n; i++) {
    y = g[x][i];
    if (y == par) continue;
    if (vis[y] == 0) {
      dfs(y, x);
      s[x] += s[y];
    }
  }
  return;
}
void go(int x, int par) {
  int n = g[x].size();
  int sum = 0;
  vis[x] = 1;
  for (int i = 0; i < n; i++) {
    if (g[x][i] != par) sum += s[g[x][i]];
  }
  double res = ans[x];
  double add = 0;
  int y;
  for (int i = 0; i < n; i++) {
    y = g[x][i];
    if (y == par) continue;
    ans[y] = res + 1.0 + ((sum - s[y]) / 2.0);
    if (vis[y] == 0) go(y, x);
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 1; i < n; i++) scanf("%d", &(a[i]));
  for (int i = 1; i < n; i++) a[i]--;
  ans[0] = 1.0;
  for (int i = 1; i < n; i++) {
    g[i].push_back(a[i]);
    g[a[i]].push_back(i);
  }
  dfs(0, -1);
  for (int i = 0; i < N; i++) vis[i] = 0;
  go(0, -1);
  for (int i = 0; i < n; i++) printf("%.6lf ", ans[i]);
  return 0;
}
