#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
constexpr int N = 2.5e5 + 5;
using i64 = long long;
using E = vector<pair<int, int> >;
using V = vector<pair<int, i64> >;
int vis[N];
int siz[N];
void gsiz(int u, int fa, E *e) {
siz[u] = 1;
for (auto [v, w] : e[u]) {
if (v == fa || vis[v]) {
continue;
}
gsiz(v, u, e);
siz[u] += siz[v];
}
}
void frt(int u, int fa, int sm, int &rt, int &rsm, E *e) {
int mxn = 0;
for (auto [v, w] : e[u]) {
if (v == fa || vis[v]) {
continue;
}
frt(v, u, sm, rt, rsm, e);
mxn = max(mxn, siz[v]);
}
if (u == fa) {
if (mxn > rsm) {
rsm = mxn;
rt = u;
}
}
if (min(mxn, sm - siz[u]) > rsm) {
rsm = min(mxn, sm - siz[u]);
rt = u;
}
}
void fdp(int u, int fa, i64 dep, int rt, V *s, E *e) {
s[u].push_back({rt, dep});
for (auto [v, w] : e[u]) {
if (v == fa || vis[v]) {
continue;
}
fdp(v, u, dep + w, rt, s, e);
}
}
void dfs(int u, V *s, E *e) {
gsiz(u, u, e);
int sm = siz[u], rt = 0, rsm = 0;
frt(u, u, sm, rt, rsm, e);
if (rt == 0) {
s[u].push_back({u, 0});
return;
}
fdp(rt, rt, 0, rt, s, e);
vis[rt] = 1;
for (auto [v, w] : e[rt]) {
if (!vis[v]) {
dfs(v, s, e);
}
}
}
int n;
E e[2][N];
V s[2][N];
V st[N];
void bld(int x) {
for (int i = 1; i <= n; i++) {
vis[i] = 0;
}
dfs(1, s[x], e[x]);
}
i64 dep[N];
i64 ans[N];
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
for (int o = 0; o < 2; o++) {
for (int i = 1, u, v, w; i < n; i++) {
cin >> u >> v >> w;
e[o][u].push_back({v, w});
e[o][v].push_back({u, w});
}
}
bld(0);
bld(1);
for (int i = 1; i <= n; i++) {
for (auto [f0, d0] : s[0][i]) {
st[f0].push_back({i, d0});
}
}
for (int i = 1; i <= n; i++) {
dep[i] = 1e18;
ans[i] = 1e18;
}
for (int c = 1; c <= n; c++) {
for (auto [u, d] : st[c]) {
for (auto [f1, d1] : s[1][u]) {
ans[u] = min(ans[u], d + d1 + dep[f1]);
dep[f1] = min(dep[f1], d + d1);
}
}
for (auto [u, d] : st[c]) {
for (auto [f1, d1] : s[1][u]) {
dep[f1] = 1e18;
}
}
for (auto it = st[c].rbegin(); it != st[c].rend(); it++) {
auto [u, d] = *it;
for (auto [f1, d1] : s[1][u]) {
ans[u] = min(ans[u], d + d1 + dep[f1]);
dep[f1] = min(dep[f1], d + d1);
}
}
for (auto [u, d] : st[c]) {
for (auto [f1, d1] : s[1][u]) {
dep[f1] = 1e18;
}
}
}
for (int i = 1; i <= n; i++) {
cout << ans[i] << '\n';
}
return 0;
}