为什么空间超限了 QwQ ,我不理解
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<map>
#include<vector>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
using namespace std;
int n,u,ww;
int depest[10001];
int head[10001],tot;
struct node
{
int to;
int nex;
int dis;
}tree[10001];
int f[10001][3];
inline void add(int xx,int yy,int ww)
{
tree[++tot]=(node){yy,head[xx],ww};
head[xx]=tot;
return;
}
inline void dp_down(int k,int fa)
{
int res1=0,res2=0,to,w;
for(int i=head[k];i;i=tree[i].nex)
{
to=tree[i].to,w=tree[i].dis;
if(to==fa) continue;
dp_down(to,k);
if(res1<f[to][0]+w) res2=res1,res1=f[to][0]+w,depest[k]=to;
else if(res2<f[to][0]+w) res2=f[to][0]+w;
}
f[k][0]=res1;f[k][1]=res2;
return;
}
inline void dp_up(int k,int fa)
{
int to,w;
for(int i=head[k];i;i=tree[i].nex)
{
to=tree[i].to,w=tree[i].dis;
if(to==fa) continue;
if(depest[k]==to) f[to][2]=max(f[k][1]+w,f[k][2]+w);
else f[to][2]=max(f[k][0]+w,f[k][2]+w);
dp_up(to,k);
}
return;
}
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
while(scanf("%d",&n)!=EOF)
{
tot=0;
memset(head, 0, sizeof(head));
memset(depest, 0, sizeof(depest));
memset(f, 0, sizeof(f));
for(int i=2;i<=n;i++) scanf("%d%d",&u,&ww),add(u,i,ww),add(i,u,ww);
dp_down(1,0);
dp_up(1,0);
for(int i=1;i<=n;i++) printf("%d\n",max(f[i][0],f[i][2]));
}
//fclose(stdin);
//fclose(stdout);
return 0;
}