#include<bits/stdc++.h>
#define int long long
using namespace std;
#define P(i, a, b) for(int i = a; i <= b; i++)
#define Q(i, a, b) for(int i = a; i >= b; i--)
const int maxn = 1005;
const int inf = 0x3f3f3f3f;
mt19937 rnd(chrono::duration_cast<chrono::nanoseconds>
(chrono::system_clock::now().time_since_epoch()).count());
int randint(int L, int R) {
uniform_int_distribution<int> dist(L, R);
return dist(rnd);
}
struct Node{
int v, w;
};
vector<vector<Node>> G;
vector<int> maxd;
int n;
void bfs(int st){
vector<int> dis(n + 1, -1);
queue<int> q;
q.push(st);
dis[st] = 0;
while(q.size()){
int u = q.front();
q.pop();
for(auto &v : G[u]){
int V = v.v, W = v.w;
if(dis[V] == -1){
dis[V] = dis[u] + W;
q.push(V);
}
}
}
P(i, 1, n){
maxd[st] = max(maxd[st], dis[i]);
}
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
while(cin >> n){
G.assign(n + 1, vector<Node>());
maxd.assign(n + 1, 0);
P(i, 2, n){
int v, w;
cin >> v >> w;
G[v].push_back({i,w});
G[i].push_back({v,w});
}
P(i, 1, n){
bfs(i);
cout << maxd[i] << endl;
}
}
}