code:
#include <cstdio> #include <string> #include <algorithm> #define N 500005 #define inf 0.0000000001 using namespace std; namespace IO { void setIO(string s) { string in=s+".in"; string out=s+".out"; freopen(in.c_str(),"r",stdin); // freopen(out.c_str(),"w",stdout) } }; double f[N]; double ans; int n,k,edges; int fa[N],hd[N],to[N],nex[N],size[N]; void add(int u,int v) { nex[++edges]=hd[u],hd[u]=edges,to[edges]=v; } void dfs(int u) { f[u]=-1.0; size[u]=1; for(int i=hd[u];i;i=nex[i]) { int v=to[i]; dfs(v); size[u]+=size[v]; } int mx=0; for(int i=hd[u];i;i=nex[i]) { int v=to[i]; f[u]=max(f[u],min(f[v],(double)size[v]/(size[u]-1))); // 最大比例 mx=max(mx,size[v]); } if(f[u]==-1.0) f[u]=N; if(size[u]>k) ans=max(ans,f[u]==N?1.0:f[u]); } int main() { // IO::setIO("input"); int i,j; scanf("%d%d",&n,&k); for(i=2;i<=n;++i) scanf("%d",&fa[i]),add(fa[i],i); ans=0.0; dfs(1); if(ans==0.0000000) printf("0 "); else printf("%.10f ",ans); return 0; }