#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define v vector
#define lp(i, s, e) for (ll i = s; i < e; ++i)
#define pll pair<ll, ll>
ll cur_k;
v<v<pll>> g;
v<ll> dp0, dp1;
void dfs(ll node, ll par) {
ll base_cost = 0;
v<ll> diffs;
for (auto edge : g[node]) {
ll nxt = edge.first;
ll w = edge.second;
if (nxt == par)
continue;
dfs(nxt, node);
base_cost += dp0[nxt] + w;
diffs.push_back(dp1[nxt] - dp0[nxt] - w);
}
sort(diffs.begin(), diffs.end());
dp0[node] = base_cost;
dp1[node] = base_cost;
lp(i, 0, min((ll)diffs.size(), cur_k)) {
if (diffs[i] < 0)
dp0[node] += diffs[i];
}
if (cur_k > 0) {
lp(i, 0, min((ll)diffs.size(), cur_k - 1)) {
if (diffs[i] < 0)
dp1[node] += diffs[i];
}
} else {
dp1[node] = 1e18;
}
}
std::vector<long long> minimum_closure_costs(int n, std::vector<int> U,
std::vector<int> V,
std::vector<int> W) {
g.resize(n);
dp0.resize(n);
dp1.resize(n);
lp(i, 0, n - 1) {
ll a = U[i], b = V[i], c = W[i];
g[a].push_back({b, c});
g[b].push_back({a, c});
}
v<ll> ans(n);
lp(k, 0, n) {
cur_k = k;
dfs(0, -1);
ans[k] = dp0[0];
}
return ans;
}
#ifndef EVAL
int main() {
int N;
assert(1 == scanf("%d", &N));
std::vector<int> U(N - 1), V(N - 1), W(N - 1);
for (int i = 0; i < N - 1; ++i) {
assert(3 == scanf("%d %d %d", &U[i], &V[i], &W[i]));
}
std::vector<long long> closure_costs = minimum_closure_costs(N, U, V, W);
for (int i = 0; i < static_cast<int>(closure_costs.size()); ++i) {
if (i > 0) {
printf(" ");
}
printf("%lld", closure_costs[i]);
}
printf("\n");
return 0;
}
#endif