#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pli = pair<ll, int>;
#define pb push_back
#define ff first
#define ss second
struct ST{
    vector<ll> t, p, a;
    int n;
    ST(int ns){
        n = ns;
        t.resize(4 * n);
        p.resize(4 * n);
    }
    void build(int v, int tl, int tr){
        if (tl == tr){
            t[v] = a[tl];
            return;
        }
        int tm = (tl + tr) / 2, vv = 2 * v;
        build(vv, tl, tm);
        build(vv + 1, tm + 1, tr);
        t[v] = max(t[vv], t[vv + 1]);
    }
    void build(){
        build(1, 1, n);
    }
    void push(int v){
        if (!p[v]) return;
        int vv = 2 * v;
        t[vv] += p[v]; t[vv + 1] += p[v];
        p[vv] += p[v]; p[vv + 1] += p[v];
        p[v] = 0;
    }
    void upd(int v, int tl, int tr, int l, int r, int x){
        if (l > tr || r < tl) return;
        if (l <= tl && tr <= r){
            t[v] += x;
            p[v] += x;
            return;
        }
        int tm = (tl + tr) / 2, vv = 2 * v;
        push(v);
        upd(vv, tl, tm, l, r, x);
        upd(vv + 1, tm + 1, tr, l, r, x);
        t[v] = max(t[vv], t[vv + 1]);
    }
    void upd(int l, int r, int x){
        upd(1, 1, n, l, r, x);
    }
    pli get(int v, int tl, int tr){
        if (tl == tr) return {t[v], tl};
        int tm = (tl + tr) / 2, vv = 2 * v;
        push(v);
        if (t[vv] > t[vv + 1]){
            return get(vv, tl, tm);
        }
        return get(vv + 1, tm + 1, tr);
    }
    pli get(){
        return get(1, 1, n);
    }
    void clear(){
        fill(t.begin(), t.end(), 0);
        fill(p.begin(), p.end(), 0);
    }
};
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n, k; cin>>n>>k;
    vector<pii> g[n + 1];
    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});
    }
    
    vector<int> tin(n + 1), tout(n + 1), W(n + 1), P(n + 1);
    vector<ll> d(n + 1);
    int timer = 0;
    function<void(int, int)> fill = [&](int v, int pr){
        P[v] = pr;
        tin[v] = ++timer;
        for (auto [i, w]: g[v]){
            if (i == pr) continue;
            W[i] = w;
            d[i] = d[v] + w;
            fill(i, v);
        }
        tout[v] = timer;
    };
    
    if (k == 1){
        fill(1, 0);
        vector<ll> out(n + 1), a(n + 1);
        for (int i = 1; i <= n; i++){
            a[tin[i]] = d[i];
        }
        ST T(n); T.a = a; T.build();
        function<void(int, int)> solve = [&](int v, int pr){
            out[v] = T.get().ff;
            for (auto [i, w]: g[v]){
                if (i == pr) continue;
                
                T.upd(1, n, w);
                T.upd(tin[i], tout[i], -2 * w);
                
                solve(i, v);
                
                T.upd(1, n, -w);
                T.upd(tin[i], tout[i], 2 * w);
            }
        };
        solve(1, 0);
        for (int i = 1; i <= n; i++){
            cout<<out[i]<<"\n";
        }
        return 0;
    }
    
    ST T(n);
    vector<int> inv(n + 1);
    vector<ll> a(n + 1);
    vector<bool> used(n + 1);
    for (int i = 1; i <= n; i++){
        timer = d[i] = 0;
        fill(i, 0);
        T.clear();
        for (int j = 1; j <= n; j++){
            if (g[j].size() == 1){
                a[tin[j]] = d[j];
            }
            else a[tin[j]] = 0;
            inv[tin[j]] = j;
            used[j] = 0;
        }
        T.a = a;
        T.build();
        used[i] = 1;
        int tt = k;
        ll out = 0;
        while (tt--){
            auto [vv, p] = T.get();
            if (!vv) break;
            out += vv;
            p = inv[p];
            while (!used[p]){
                used[p] = 1;
                T.upd(tin[p], tout[p], -W[p]);
                p = P[p];
            }
        }
        cout<<out<<"\n";
    }
}
| # | 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... |