OI XXIV - sab

// https://szkopul.edu.pl/problemset/problem/CUjJDGGSEZmO7HvdZU4FKrL6/site/?key=statement

#include <bits/stdc++.h>

using namespace std;

#define int long long

constexpr int sizik = 1000 * 1001;

#define ar std::array
#define pr std::pair
#define vec std::vector

typedef vec<vec<int>> _kra;
typedef long double ld;

int n, k;
int parent[sizik];
std::vector<int> kra[sizik];

int dp[sizik], dp1[sizik];

void DFS(int v, int p, ld s) {
    dp1[v] = 1;
    int maxi = 0;

    for (const auto& u : kra[v]) {
        if (u != p) {
            DFS(u, v, s);
            dp1[v] += dp1[u];
            maxi = std::max(maxi, dp[u]);
        }
    }

    ld x = (ld)(dp1[v] - 1) * s;
    if (maxi >= x) {
        dp[v] = dp1[v];
    } else {
        dp[v] = maxi;
    }
}

bool check(ld s) {
    DFS(1, 1, s);
    return !(dp[1] > k);
}

void solve() {
    std::cin >> n >> k;

    for (int i = 2; i <= n; i++) {
        int a;
        std::cin >> a;

        parent[i] = a;
        kra[a].push_back(i);
        kra[i].push_back(a);
    }

    ld l = 0.0, r = 1.0;
    while (r - l > 1e-7) {
        ld s = (l + r) / (ld)2.0;
        if (check(s)) {
            r = s;
        } else {
            l = s;
        }
    }

    std::cout << l << '\n';
}

int32_t main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int t = 1;
    std::cout << std::fixed << std::setprecision(7);

    for (; t > 0; t--) {
        solve();
    }

    return 0;
}