#include <bits/stdc++.h>
#define MOD 1000000007
#define int long long
#define pb push_back
#define bw(i,r,l) for (int i=r-1;i>=l;i--)
#define fw(i,l,r) for (int i=l;i<r;i++)
using namespace std;
typedef pair<int,int> ii;
typedef pair<int,ii> edge;
const int N=100005;
int n,par[N],sz[N],ans[N],lazy[N]; vector<edge> e; vector<int> child[100001];
int getp(int u) {
if (u==par[u]) return u;
return par[u]=getp(par[u]);
}
void joint(int u,int v,int val) {
if (sz[u]>sz[v]) swap(u,v);
//Now we only have to merge u into v
while (child[u].size()) {
child[v].pb(child[u].back());
int temp=child[u].back();
if (lazy[u]) ans[temp]+=lazy[u];
ans[temp]+=val*sz[v];
ans[temp]-=val*sz[u];
ans[temp]-=lazy[v];
child[u].pop_back();
}
lazy[v]+=sz[u]*val;
sz[v]+=sz[u];
par[u]=v;
}
signed main() {
//freopen("aome.inp","r",stdin);
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin>>n;
fw (i,1,n) {
int a,b,c; cin>>a>>b>>c; a--; b--;
e.pb(edge(c,ii(a,b)));
}
sort(e.begin(),e.end());
reverse(e.begin(),e.end());
/*
Idea: Sort all edges based on their c values. Then if a and b doesn't belong to the same group,
every item in b will connect to every item in a with a cost ofc.
Merge the smaller group into the bigger one, so each item will be merged exactly log(N) times.
To update the smaller group, just do it manually. To update the bigger group, we keep a lazy value
for it, so if we need to update it later when merging we will also perform the lazy update.
Call the larger group u, smaller one v. Every item in v is added c * sz[u], and otherwise.
To successfully use lazy, erase all the elements in v by the supposed lazy value we will add.
*/
fw (i,0,n) {
child[i].pb(i);
sz[i]=1;
par[i]=i;
ans[i]=0;
lazy[i]=0;
}
fw (i,0,e.size()) {
int c=e[i].first,u=e[i].second.first,v=e[i].second.second;
int pu=getp(u),pv=getp(v);
if (pu==pv) continue;
joint(pu,pv,c);
}
fw (i,0,n) ans[i]+=lazy[getp(i)];
fw (i,0,n) cout<<ans[i]<<"\n";
}