This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#pragma GCC optimize("Ofast,O3,unroll-loops")
#pragma GCC target("avx,avx2")
#include <bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define bpc(x) __builtin_popcount(x)
#define bpcll(x) __builtin_popcountll(x)
#define MP make_pair
#define BIT(x, i) (((x) >> (i)) & 1)
//#define endl '\n'
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
typedef long long ll;
const int MOD = 1e9 + 7;
const int N = 2e5 + 30;
int n;
vector<pair<int, int>> g[N];
ll dep[N];
int up[N][18];
ll sum[N][18];
void dfs0(int v, int p){
    up[v][0] = p;
    sum[v][0] = dep[v] - dep[p];
    for (int i = 1; i < 18; i++){
        int pp = up[v][i - 1];
        up[v][i] = up[pp][i - 1];
        sum[v][i] = sum[v][i - 1] + sum[pp][i - 1];
    }
    for (auto [u, w] : g[v]){
        if (u != p){
            dep[u] = dep[v] + w;
            dfs0(u, v);
        }
    }
}
ll was[N];
bool deleted[N];
void dfs(int v, int p, ll dist){
    if (was[v] >= dist) return;
    was[v] = dist;
    deleted[v] = true;
    for (auto [u, w] : g[v]){
        if (u == p) continue;
        if (w <= dist){
            dfs(u, v, dist - w);
        } else {
            break;
        }
    }
}
int parks[N];
vector<int> order;
int parks_cnt(ll d){
    for (int i = 1; i <= n; i++){
        was[i] = -1;
        deleted[i] = false;
    }
    int sz = 0;
    for (int i = 0; i < n; i++){
        int v = order[i];
        if (deleted[v]) continue;
        ll x = d;
        for (int j = 17; j >= 0; j--){
            if (sum[v][j] <= x){
                x -= sum[v][j];
                v = up[v][j];
            }
        }
        parks[sz++] = v;
        dfs(v, -1, d);
    }
    return sz;
}
int ans[N];
void solve(){
    int k;
    cin >> n >> k;
    for (int i = 1; i < n; i++){
        int u, v, w;
        cin >> u >> v >> w;
        g[u].emplace_back(v, w);
        g[v].emplace_back(u, w);
    }
    int root = 1;
    for (int i = 1; i <= n; i++){
        if (g[i].size() > 1) root = i;
        sort(all(g[i]), [&](auto x, auto y){
            return x.second < y.second;
        });
    }
    dfs0(root, root);
    order.resize(n);
    iota(all(order), 1);
    sort(all(order), [&](int i, int j){
        return dep[i] > dep[j];
    });
    int sz = 0;
    ll l = 0, r = 2e14;
    while (l <= r){
        ll m = (l + r) >> 1;
        int res = parks_cnt(m);
        if (res <= k){
            sz = res;
            for (int i = 0; i < res; i++) ans[i] = parks[i];
            r = m - 1;
        } else {
            l = m + 1;
        }
    }
    sort(ans, ans + sz);
    cout << ++r << endl;
    for (int i = 0; i < sz; i++) cout << ans[i] << ' ';
    int x = k - sz;
    for (int i = 1; i <= n; i++){
        if (x == 0) break;
        int j = lower_bound(ans, ans + sz, i) - ans;
        if (j == sz || ans[j] != i){
            cout << i << ' ';
            x--;
        }
    }
    cout << endl;
}
int main(){
    clock_t startTime = clock();
    ios_base::sync_with_stdio(false);
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif
    int test_cases = 1;
//    cin >> test_cases;
    for (int test = 1; test <= test_cases; test++){
        // cout << (solve() ? "YES" : "NO") << endl;
        solve();
    }
#ifdef LOCAL
    cerr << "Time: " << int((double) (clock() - startTime) / CLOCKS_PER_SEC * 1000) << " ms" << endl;
#endif
    return 0;
}
Compilation message (stderr)
Main.cpp: In function 'int main()':
Main.cpp:162:13: warning: unused variable 'startTime' [-Wunused-variable]
  162 |     clock_t startTime = clock();
      |             ^~~~~~~~~| # | 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... |