#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;
n++;
w.resize(n-2);
for(int i=0;i<n-2;i++){
int a,b;
cin>>a>>b;
cin>>w[i];
}
w.push_back(1000000000000000001ll);
int maxedge=0ll;
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... |