#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
using vvl = vector<vll>;
using pll = pair<ll,ll>;
using vpl = vector<pll>;
using vvp = vector<vpl>;
using vi = vector<int>;
#define f first
#define s second
#define pb push_back
#define all(v) v.begin(),v.end()
vll w,deg, dp, dp1, al, dw;
vvp g;
vvl del, del1;
void dfs(ll cur, ll pr, ll k){
priority_queue<pll,vpl,greater<pll>> pq;
for(auto [i,e]: g[cur]){
if(i!=pr){
dw[e]=i;
dfs(i,cur,k);
dp1[cur]+=dp[i];
pq.push({dp1[i]-dp[i]+w[e],e});
}
}
while(!pq.empty() && (pq.top().f<0 || g[cur].size()-del1[cur].size()-del[cur].size()-1>k)){
auto [v,e] = pq.top();
pq.pop();
dp1[cur]+=v;
del1[cur].pb(e);
}
dp[cur]=dp1[cur];
while(!pq.empty() && (pq.top().f<0 || g[cur].size()-del1[cur].size()-del[cur].size()>k)){
auto [v,e] = pq.top();
pq.pop();
dp[cur]+=v;
del[cur].pb(e);
}
}
void fil(ll cur, ll pr, ll ch=0){
for(ll i:del1[cur]){
al.pb(i);
fil(dw[i],cur,1);
dp[dw[i]=-1];
}
if(!ch){
for(ll i:del[cur]){
al.pb(i);
fil(dw[i],cur,1);
dp[dw[i]=-1];
}
}
for(auto [i,e]: g[cur]){
if(i!=pr && dp[i]!=-1){
dp[i]=-1;
fil(i,cur);
}
}
}
std::vector<long long> minimum_closure_costs(int n, vi u, vi v, vi W) {
g = vvp(n);
dw=deg = vll(n);
vll ans(n);
for(ll i = 0; i < n-1; ++i){
ans[0]+=W[i];
w.pb(W[i]);
g[u[i]].pb({v[i],i});
g[v[i]].pb({u[i],i});
deg[u[i]]++;
deg[v[i]]++;
}
vll las(n-1,1);
for(ll i = 1; i < n; ++i){
dp=dp1=vll(n);
del=del1=vvl(n);
dfs(0,0,i);
ans[i]=dp[0];
al.clear();
fil(0,0);
for(ll i:al){
if(las[i]==0){
cout << "!";
}
}
las=vll(n-1,0);
for(ll i:al){
las[i]=1;
}
}
return ans;
}
// int main() {
// int N;
// assert(1 == scanf("%d", &N));
// vi 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;
// }