#include<bits/stdc++.h>

#define pb push_back
#define mp make_pair
#define taskname "A"

using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<int,int> ii;
const int maxn = 1e5 + 5;
struct BIT{
    ll bit[maxn];
    ll query(int x){
        ll res = 0;
        for(++x; x > 0 ; x &= x - 1)res += bit[x];
        return res;
    }
    void update(int x , int val){
        for(++x; x <= 1e5 + 1 ; x += x & -x){
            bit[x] += val;
        }
    }
}s[2];

vector<int> val;
vector<int> adj[maxn];
ll res[maxn];
bool vis[maxn];
int n,a[maxn],b[maxn],c[maxn];
int sub[maxn] , big[maxn];
int FindRoot(int u){
    function<void(int,int)> dfs = [&](int u , int par){
        sub[u] = 1;big[u] = -1;
        for(auto & tmp : adj[u]){
            int c = a[tmp] + b[tmp] - u;
            if(vis[c] == 0 && c != par){
                dfs(c,u);
                sub[u] += sub[c];
                if(big[u] == -1 || sub[big[u]] < sub[c])big[u] = c;
            }
        }
    };
    dfs(u,0);
    int tot = sub[u];
    while(big[u] != -1 && sub[big[u]] >= tot / 2)u = big[u];
    return u;
}
void Centroid(int u){
    u = FindRoot(u);
    int root = u;
    function<void(int,int,int,int,bool)> dfs = [&](int u , int par , int C,int delta,bool add){
        s[0].update(C,1*delta);
        s[1].update(C,val[C]*delta);
//        cout << root << " " << u << " " << C << " " << delta << endl;
        if(u != root && add){
            res[root] += val[C];
        }
        for(auto & tmp : adj[u]){
            int c = a[tmp] + b[tmp] - u;
            if(vis[c] == 0 && c != par){
                dfs(c,u,min(C,::c[tmp]),delta,add);
            }
        }
    };
    vis[u] = 1;
    dfs(u , 0 , (int)val.size() - 1,1,1);
    for(auto & tmp : adj[u]){
        int c = a[tmp] + b[tmp] - u;
        if(vis[c] == 0){
            dfs(c,u,::c[tmp],-1,0);
            function<void(int,int,int)> dfs1 = [&](int u , int par , int C){
//                cout << root << " " << u << " " << C << " " << s[1].query(C) << " " <<
//                 (s[0].query(1e5)-s[0].query(C)) * val[C] << endl;
                res[u] += s[1].query(C);
                res[u] += (s[0].query(1e5)-s[0].query(C)) * val[C];
                for(auto & tmp : adj[u]){
                    int c = a[tmp] + b[tmp] - u;
                    if(vis[c] == 0 && c != par){
                        dfs1(c,u,min(C,::c[tmp]));
                    }
                }
            };
            dfs1(c,u,::c[tmp]);
            dfs(c,u,::c[tmp],1,0);
        }
    }
    dfs(u , 0 , (int)val.size() - 1,-1,0);
    for(auto & tmp : adj[u]){
        int c = a[tmp] + b[tmp] - u;
        if(vis[c] == 0)Centroid(c);
    }
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    if(fopen(taskname".INP","r")){
		freopen(taskname".INP", "r",stdin);
		freopen(taskname".OUT", "w",stdout);
    }
    cin >> n;
    for(int i = 1 ; i < n ; ++i){
        cin >> a[i] >> b[i] >> c[i];
        val.pb(c[i]);
        adj[a[i]].pb(i);adj[b[i]].pb(i);
    }
    val.pb(1e9);
    sort(val.begin(),val.end());val.erase(unique(val.begin(),val.end()),val.end());
    for(int i = 1 ; i < n ; ++i){
        c[i] = lower_bound(val.begin(),val.end(),c[i])-val.begin();
    }
    Centroid(1);
    for(int i = 1 ; i <= n ; ++i)cout << res[i] << '\n';
}


Measured memory_bytes: 21368