卡精度?
查看原帖
卡精度?
684131
VainSylphidElena楼主2024/9/5 15:52

窝不理解。

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;
}
2024/9/5 15:52
加载中...