#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <tuple>
using namespace std;
typedef long long ll;
#define SZ(a) (int)(a).size()
vector<vector<tuple<int,int,int>>> al;
vector<vector<pair<ll,int>>> memf;
vector<int> ny;
pair<ll,int> f (int u, int p) {
if (memf[u][p].first != -1) {
return memf[u][p];
}
else if (ny[u] == SZ(al[u])) {
auto res = memf[u][SZ(al[u])];
auto t = al[u][p];
auto res1 = f(get<1>(t), get<2>(t));
auto sum = res.first-res1.first-(ll)res1.second*get<0>(t);
auto sz = res.second-res1.second;
return memf[u][p] = {sum, sz};
}
else if (ny[u] != -1) {
auto res = memf[u][ny[u]];
auto t = al[u][ny[u]];
auto res1 = f(get<1>(t), get<2>(t));
auto sum = res.first+res1.first+(ll)res1.second*get<0>(t);
auto sz = res.second+res1.second;
memf[u][SZ(al[u])] = {sum, sz};
ny[u] = SZ(al[u]);
return f(u, p);
}
else {
ll sum = 0;
int sz = 1;
for (int i = 0; i < SZ(al[u]); i++) if (i != p) {
auto t = al[u][i];
auto res = f(get<1>(t), get<2>(t));
sum += res.first+(ll)res.second*get<0>(t);
sz += res.second;
}
ny[u] = p;
return memf[u][p] = {sum, sz};
}
}
int main() {
cin.sync_with_stdio(false);
int n;
cin >> n;
al.assign(n, {});
for (int i = 0; i < n-1; i++) {
int u, v, w;
cin >> u >> v >> w;
u--;
v--;
auto su = SZ(al[u]);
auto sv = SZ(al[v]);
al[u].emplace_back(w, v, sv);
al[v].emplace_back(w, u, su);
}
memf.resize(n);
for (int u = 0; u < n; u++) {
memf[u].assign(SZ(al[u])+1, {-1, -1});
}
ny.assign(n, -1);
for (int u = 0; u < n; u++) {
printf("%lld%c", f(u, SZ(al[u])).first, " \n"[u == n-1]);
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dHVwbGU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwojZGVmaW5lIFNaKGEpIChpbnQpKGEpLnNpemUoKQogCnZlY3Rvcjx2ZWN0b3I8dHVwbGU8aW50LGludCxpbnQ+Pj4gYWw7CnZlY3Rvcjx2ZWN0b3I8cGFpcjxsbCxpbnQ+Pj4gbWVtZjsKdmVjdG9yPGludD4gbnk7CiAKIApwYWlyPGxsLGludD4gZiAoaW50IHUsIGludCBwKSB7CglpZiAobWVtZlt1XVtwXS5maXJzdCAhPSAtMSkgewoJCXJldHVybiBtZW1mW3VdW3BdOwoJfQoJZWxzZSBpZiAobnlbdV0gPT0gU1ooYWxbdV0pKSB7CgkJYXV0byByZXMgPSBtZW1mW3VdW1NaKGFsW3VdKV07CgkJYXV0byB0ID0gYWxbdV1bcF07CgkJYXV0byByZXMxID0gZihnZXQ8MT4odCksIGdldDwyPih0KSk7CgkJYXV0byBzdW0gPSByZXMuZmlyc3QtcmVzMS5maXJzdC0obGwpcmVzMS5zZWNvbmQqZ2V0PDA+KHQpOwoJCWF1dG8gc3ogPSByZXMuc2Vjb25kLXJlczEuc2Vjb25kOwoJCXJldHVybiBtZW1mW3VdW3BdID0ge3N1bSwgc3p9OwoJfQoJZWxzZSBpZiAobnlbdV0gIT0gLTEpIHsKCQlhdXRvIHJlcyA9IG1lbWZbdV1bbnlbdV1dOwoJCWF1dG8gdCA9IGFsW3VdW255W3VdXTsKCQlhdXRvIHJlczEgPSBmKGdldDwxPih0KSwgZ2V0PDI+KHQpKTsKCQlhdXRvIHN1bSA9IHJlcy5maXJzdCtyZXMxLmZpcnN0KyhsbClyZXMxLnNlY29uZCpnZXQ8MD4odCk7CgkJYXV0byBzeiA9IHJlcy5zZWNvbmQrcmVzMS5zZWNvbmQ7CgkJbWVtZlt1XVtTWihhbFt1XSldID0ge3N1bSwgc3p9OwoJCW55W3VdID0gU1ooYWxbdV0pOwoJCXJldHVybiBmKHUsIHApOwoJfQoJZWxzZSB7CgkJbGwgc3VtID0gMDsKCQlpbnQgc3ogPSAxOyAKCQlmb3IgKGludCBpID0gMDsgaSA8IFNaKGFsW3VdKTsgaSsrKSBpZiAoaSAhPSBwKSB7CgkJCWF1dG8gdCA9IGFsW3VdW2ldOwoJCQlhdXRvIHJlcyA9IGYoZ2V0PDE+KHQpLCBnZXQ8Mj4odCkpOwoJCQlzdW0gKz0gcmVzLmZpcnN0KyhsbClyZXMuc2Vjb25kKmdldDwwPih0KTsKCQkJc3ogKz0gcmVzLnNlY29uZDsKCQl9CgkJbnlbdV0gPSBwOwoJCXJldHVybiBtZW1mW3VdW3BdID0ge3N1bSwgc3p9OwoJfQp9CiAKaW50IG1haW4oKSB7CgljaW4uc3luY193aXRoX3N0ZGlvKGZhbHNlKTsKCWludCBuOwoJY2luID4+IG47CglhbC5hc3NpZ24obiwge30pOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuLTE7IGkrKykgewoJCWludCB1LCB2LCB3OwoJCWNpbiA+PiB1ID4+IHYgPj4gdzsKCQl1LS07CgkJdi0tOwoJCWF1dG8gc3UgPSBTWihhbFt1XSk7CgkJYXV0byBzdiA9IFNaKGFsW3ZdKTsKCQlhbFt1XS5lbXBsYWNlX2JhY2sodywgdiwgc3YpOwoJCWFsW3ZdLmVtcGxhY2VfYmFjayh3LCB1LCBzdSk7Cgl9CgltZW1mLnJlc2l6ZShuKTsKCWZvciAoaW50IHUgPSAwOyB1IDwgbjsgdSsrKSB7CgkJbWVtZlt1XS5hc3NpZ24oU1ooYWxbdV0pKzEsIHstMSwgLTF9KTsKCX0KCW55LmFzc2lnbihuLCAtMSk7Cglmb3IgKGludCB1ID0gMDsgdSA8IG47IHUrKykgewoJCXByaW50ZigiJWxsZCVjIiwgZih1LCBTWihhbFt1XSkpLmZpcnN0LCAiIFxuIlt1ID09IG4tMV0pOwoJfQoJcmV0dXJuIDA7Cn0KIA==