This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//Bismillahir-Rahmanir-Rahim
#include <bits/stdc++.h>
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("O1,O2,O3,Ofast,unroll-loops")
//#pragma GCC target("sse,sse2,sse3,sse4,sse4.1,sse4.2,popcnt,avx,avx2")
#define pb push_back
#define pii pair <int, int>
#define pll pair <long long, long long>
#define pld pair <long double, long double>
#define ll long long
#define ld long double
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define sz(s) (int)s.size()
#define skip continue
#define bpop(x) (ll)__builtin_popcountll(x)
using namespace std;
const int N = 1e5 + 7;
const int M = 62;
const int maxA = 1e7 + 7;
const int inf = 1e9 + 7;
const ll INF = 1e18 + 7;
const ll MOD = 998244353;
const ld eps = 1e-9;
pii dir[] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define int long long
pii mx[N];
vector <pii> g[N];
int n, k, T, ans[N], dist[N];
set <pii> best, extra;
int sum_best = 0, sum_extra = 0;
void add(pii val) {
    //cout << "add: " << val.x << ' ' << val.y << '\n';
    best.insert(val), sum_best += val.x;
    if (sz(best) > k) {
        pii x = *best.begin();
        best.erase(x), extra.insert(x);
        sum_best -= x.x, sum_extra += x.x;
    }
}
void del(pii val) {
    //cout << "del: " << val.x << ' ' << val.y << '\n';
    if (best.count(val)) {
        best.erase(val), sum_best -= val.x;
        pii x = *extra.rbegin();
        extra.erase(x), sum_extra -= x.x;
        //cout << "del + ";
        add(x);
    }
    else {
        extra.erase(val);
        sum_extra -= val.x;
    }
}
void build(int v, int pr) {
    mx[v] = {dist[v], v};
    for (auto p : g[v]) {
        int to = p.x, w = p.y;
        if (to == pr)skip;
        dist[to] = dist[v] + w, build(to, v);
        mx[v] = max(mx[v], mx[to]);
    }
}
void build2(int v, int pr) {
    if (pr == 0 || mx[v].y != mx[pr].y)add({mx[v].x - dist[pr], mx[v].y});
    for (auto p : g[v]) {
        int to = p.x, w = p.y;
        if (to == pr)skip;
        build2(to, v);
    }
}
pii mxup[N];
void dfs(int v, int pr, int sub) {
    ans[v] = sum_best;
    pii mx1 = {0, 0}, mx2 = {0, 0};
    for (auto p : g[v]) {
        int to = p.x, w = p.y;
        if (to == pr)skip;
        if (mx[to].x - sub > mx1.x)mx2 = mx1, mx1 = {mx[to].x - sub, mx[to].y};
        else mx2 = max(mx2, {mx[to].x - sub, mx[to].y});
    }
    //cout << v << ":\n";
    //for (auto p : extra)cout << p.x << ' ' << p.y << '\n';
    //cout << '\n';
    //for (auto p : best)cout << p.x << ' ' << p.y << '\n';
    //cout << '\n';
    for (auto p : g[v]) {
        int to = p.x, w = p.y;
        if (to == pr)skip;
        //cout << v << "<->" << to << ":\n";
        pii val = max(((pii){mx[to].x - sub, mx[to].y} == mx1 ? mx2 : mx1), mxup[v]);
        del(val), add({val.x + w, val.y}), del({mx[to].x - sub, mx[to].y}), add({mx[to].x - w - sub, mx[to].y});
        mxup[to] = pii{val.x + w, val.y};
        dfs(to, v, sub + w);
        del({mx[to].x - w - sub, mx[to].y}), add({mx[to].x - sub, mx[to].y}), del({val.x + w, val.y}), add(val);
    }
}
void solve() {
    cin >> n >> k;
    int total = 0, cnt_leaf = 0;
    for (int i = 1;i < n;i++) {
        int x, y, w;
        cin >> x >> y >> w;
        g[x].pb({y, w}), g[y].pb({x, w});
        total += w;
    }
    for (int i = 1;i <= n;i++)cnt_leaf += (sz(g[i]) == 1);
    build(1, 0), build2(1, 0);
    if (sz(g[1]) == 1)add({0, 1});
    //k = min(k, sz(best) + sz(extra));
    //cout << "GAY:\n";
    //for (auto p : extra)cout << p.x << ' ' << p.y << '\n';
    //for (auto p : best)cout << p.x << ' ' << p.y << '\n';
    //cout << ":GAY\n";
    dfs(1, 0, 0);
    for (int i = 1;i <= n;i++)cout << ans[i] << '\n';
}
signed main() {
    //srand(time(NULL));
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    //freopen("tests.in", "r", stdin);
    //freopen("milkorder.out", "w", stdout);
    int test = 1;
    //cin >> test;
    for (int t = 1;t <= test;t++) {
        //cout << "Case " << t << ": ";
        solve();
    }
    return 0;
}
Compilation message (stderr)
Main.cpp: In function 'void build2(long long int, long long int)':
Main.cpp:77:23: warning: unused variable 'w' [-Wunused-variable]
   77 |         int to = p.x, w = p.y;
      |                       ^
Main.cpp: In function 'void dfs(long long int, long long int, long long int)':
Main.cpp:87:23: warning: unused variable 'w' [-Wunused-variable]
   87 |         int to = p.x, w = p.y;
      |                       ^| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |