#include<bits/stdc++.h>
using namespace std;
#define ll long long
int const mod=1e9+7;
int const INF=0x3f3f3f3f;
int const N=1e5+7;
struct node{
int a,next,len;
}e[N<<1];
int cnt,head[N];
void add(int x,int y,int len){
e[++cnt].a=y;
e[cnt].len=len;
e[cnt].next=head[x];
head[x]=cnt;
}
int n;
int chu[N];
bool vis[N];
struct L{
ll p,w;
friend bool operator<(L a,L b){
return a.w>b.w;
}
};
int w[N][3];
ll ans[N];
priority_queue<L>pq;
void merge(int p,int len){ //最大值和次大值
if(len<w[p][1]) w[p][2]=w[p][1],w[p][1]=len;
else if(len<w[p][2]) w[p][2]=len;
}
int main(){
cin >> n;
for(int i=1,a,b,c;i<=n-1;++i){
cin >> a >> b >> c;
add(a,b,c);add(b,a,c);
chu[a]++;chu[b]++;
}
memset(w,0x3f,sizeof w);
memset(ans,0x3f,sizeof ans);
for(int i=1;i<=n;++i){
if(chu[i]<2) {
ans[i]=0;w[i][1]=w[i][2]=0;
pq.push((L){i,0});
}
}
while(!pq.empty()){
int u=pq.top().p,z=pq.top().w;pq.pop();
if(z>ans[u]) continue;
for(int i=head[u];i;i=e[i].next){
int v=e[i].a;
merge(v,z+e[i].len);
if(w[v][1]+w[v][2]<ans[v]) ans[v]=w[v][1]+w[v][2],pq.push((L){v,ans[v]});
}
}
for(int i=1;i<=n;++i) if(ans[i]>1e9) ans[i]=-1;
for(int i=1;i<=n;++i) cout << ans[i] << " ";
return 0;
}