窝不理解。
98 pts:
#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define inf 0x3f3f3f3f
using namespace std;
int n,k,fa[500005],sz[500005];
ld dp[500005],ans;
int main()
{
scanf("%d%d",&n,&k);
for(int i = 2;i <= n;i++)
scanf("%d",&fa[i]);
for(int i = n;i > 1;i--)
sz[i]++,sz[fa[i]] += sz[i];
for(int i = n;i > 1;i--)
{
if(sz[i] == 1)
dp[i] = 1;
dp[fa[i]] = max(dp[fa[i]],min(dp[i],(ld)sz[i] / (sz[fa[i]] - 1)));
}
for(int i = 1;i <= n;i++)
if(sz[i] > k)
ans = max(ans,dp[i]);
printf("%.10Lf",ans);
return 0;
}
100 pts:
#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define inf 0x3f3f3f3f
using namespace std;
int n,k,fa[500005],sz[500005];
vector<int> e[500005];
ld dp[500005],ans;
void dfs(int u)
{
sz[u] = 1;
if(e[u].empty())
{
dp[u] = 1;
return;
}
for(auto v : e[u])
dfs(v),sz[u] += sz[v];
for(auto v : e[u])
dp[u] = max(dp[u],min(dp[v],(ld)sz[v] / (sz[u] - 1)));
if(sz[u] > k)
ans = max(ans,dp[u]);
}
int main()
{
scanf("%d%d",&n,&k);
for(int i = 2;i <= n;i++)
scanf("%d",&fa[i]),e[fa[i]].push_back(i);
dfs(1);
printf("%.10Lf",ans);
return 0;
}