#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,k;
vector<int> w;
bool proveri(int dist){
    int cnt=0ll;
    int i=0ll;
    int sum=0ll;
    while(i<n-1ll){
        if(sum+w[i]>dist){
            sum=0ll;
            cnt++;
            while(sum<dist && i<n-1ll){
                sum+=w[i];
                if(sum>dist)break;
                i++;
            }
            sum=0ll;
            i++;
        }
        else{
            i++;
            sum+=w[i];
        }
    }
    if(cnt>k)return false;
    return true;
}
int32_t main()
{
    cin>>n>>k;
    w.resize(n-1);
    for(int i=0;i<n-1;i++){
        int a,b;
        cin>>a>>b;
        cin>>w[i];
    }
    int maxedge=0ll;
    for(int i=0;i<n-1;i++)maxedge=max(maxedge,w[i]);
    int l=0ll;
    int r=100000000000000000ll;
    while(l<=r){
        int mid=l+(r-l)/2ll;
        //cout<<mid<<endl;
        if(proveri(mid))r=mid-1ll;
        else l=mid+1ll;
    }
    cout<<l<<endl;
    int cnt=0ll;
    int i=0ll;
    int sum=0ll;
    while(i<n-1ll){
        if(sum+w[i]>l){
            cout<<i+1<<' ';
            sum=0ll;
            cnt++;
            while(sum<l && i<n-1ll){
                sum+=w[i];
                if(sum>l)break;
                i++;
            }
            sum=0ll;
            i++;
        }
        else{
            i++;
            sum+=w[i];
        }
    }
    return 0;
}
| # | 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... |