#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-6;
const long long mx = 110000;
double ans[mx];
long long mul[mx], cnt = 0;
struct Edge {
  int to, next;
} edge[mx << 2];
int n, x, head[mx], fa[mx], son[mx], sum[mx], dep[mx];
void add(int a, int b) {
  edge[cnt].to = b;
  edge[cnt].next = head[a];
  head[a] = cnt++;
}
void dfs(int now, int last) {
  sum[now] = 1;
  fa[now] = last;
  for (int i = head[now]; ~i; i = edge[i].next) {
    int nxt = edge[i].to;
    if (nxt == last) continue;
    son[now]++;
    dep[nxt] = dep[now] + 1;
    dfs(nxt, now);
    sum[now] += sum[nxt];
  }
}
void dfs2(int now, int last) {
  if (now > 1) {
    long long up = dep[now] + sum[now];
    long long tmp = dep[now] * 2ll + 2ll;
    double res = (n - up + tmp) / 2.0;
    ans[now] = res;
  }
  for (int i = head[now]; ~i; i = edge[i].next) {
    int nxt = edge[i].to;
    if (nxt == last) continue;
    dfs2(nxt, now);
  }
}
int main() {
  memset(head, -1, sizeof(head));
  memset(son, 0, sizeof(son));
  memset(sum, 0, sizeof(sum));
  scanf("%d", &n);
  for (int i = 2; i <= n; i++) {
    scanf("%d", &x);
    add(x, i);
    add(i, x);
  }
  ans[1] = 1.0;
  dep[1] = 0;
  dfs(1, 1);
  dfs2(1, 1);
  for (int i = 1; i <= n; i++) printf("%.1f\n", ans[i]);
  return 0;
}
