#include<cstdio>
#include<cstring>
struct edge
{
int v;
int w;
int nxt;
}e[10010<<1];
int tot;
int head[10010];
void add(int u,int v,int w)
{
e[++tot].v=v;
e[tot].w=w;
e[tot].nxt=head[u];
head[u]=tot;
}
int n;
long long dp[10010];
int max(int a,int b)
{
return a>b?a:b;
}
void dfs(int x,int fx)
{
for(int i=head[x];i;i=e[i].nxt)
{
int v=e[i].v;
int w=e[i].w;
if(v==fx) continue;
dfs(v,x);
dp[x]=max(dp[x],dp[v]+w);
}
}
int main()
{
while(~scanf("%d",&n))
{
for(int i=2,v,w;i<=n;i++)
{
scanf("%d%d",&v,&w);
add(i,v,w);
add(v,i,w);
}
for(int i=1;i<=n;i++)
{
memset(dp,0,sizeof(dp));
dfs(i,0);
printf("%lld\n",dp[i]);
}
}
return 0;
}
空间上限:32768 K
原exe大小:118KB
评测:exe.memory:30000+KB
为什么我这个会MLE