#include <bits/stdc++.h>
using namespace std;
inline int rint() {
  int a;
  scanf("%d", &a);
  return a;
}
inline long long rll() {
  long long a;
  scanf("%lld", &a);
  return a;
}
inline double rdouble() {
  double a;
  scanf("%lf", &a);
  return a;
}
long long gcd(long long a, long long b) { return (b) ? gcd(b, a % b) : a; }
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
long long pow(long long a, long long b, long long q) {
  long long k = a;
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * k % q;
    k = k * k % q;
    b >>= 1;
  }
  return ans;
}
vector<int> v[100005];
double res[100005];
int cnt[100005];
void dfs1(int x) {
  int temp = 1;
  for (int i = 0; i < v[x].size(); i++) {
    dfs1(v[x][i]);
    temp += cnt[v[x][i]];
  }
  cnt[x] = temp;
}
void dfs2(int x) {
  for (int i = 0; i < v[x].size(); i++) {
    res[v[x][i]] = res[x] + 1 + 0.5 * (cnt[x] - cnt[v[x][i]] - 1);
    dfs2(v[x][i]);
  }
}
int main() {
  int n = rint();
  for (int i = 2; i <= n; i++) {
    int x = rint();
    v[x].push_back(i);
  }
  dfs1(1);
  res[1] = 1;
  dfs2(1);
  for (int i = 1; i <= n; i++) printf("%.10f ", res[i]);
}
