#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
typedef pair<int,int> PII;
const int N = 10010;
vector<PII> g[N];
int d1[N],d2[N],df[N],dn[N];
int n;
void dfs_d(int u,int fa)
{
for(auto &it:g[u])
{
int j=it.first,w=it.second;
if(j==fa) continue;
dfs_d(j,u);
if(d1[u]<=d1[j]+w) d2[u]=d1[u],d1[u]=d1[j]+w,dn[u]=j;
else if(d2[u]<d1[j]+w) d2[u]=d1[j]+w;
}
}
void dfs_f(int u,int fa)
{
for(auto &it:g[u])
{
int j=it.first,w=it.second;
if(j==fa) continue;
if(dn[u]==j) df[j]=max(df[u],d2[u])+w;
else df[j]=max(df[u],d1[u])+w;
dfs_f(j,u);
}
}
int main()
{
while(cin>>n)
{
memset(d1,0,sizeof d1);
memset(d2,0,sizeof d2);
memset(df,0,sizeof df);
memset(dn,0,sizeof dn);
for(int i=1;i<=n;i++) g[i].clear();
for(int i=2;i<=n;i++)
{
int b,c;cin>>b>>c;
g[i].push_back({b,c});
g[b].push_back({i,c});
}
dfs_d(1,-1);
dfs_f(1,-1);
for(int i=1;i<=n;i++)
cout<<max(d1[i],df[i])<<endl;
}
return 0;
}