#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<pair<int,int>>adj[200006];
int w[200006];
int vis[200005];
int sum[200005];
int dp[200005];
int back[200005];
int place[200005];
int n,k;
vector<int>ans;
int check(int m){
for(int i=1;i<=n;i++)dp[i]=0;
for(int i=2;i<=n;i++){
int st=1,en=i,ans=0;
while(st<=en){
int md=(st+en)/2;
//cerr<<st<<" "<<en<<" "<<md<<"\n";
if(sum[i-1]-sum[md-1]<=m){
ans=md;
en=md-1;
}else{
st=md+1;
}
}
//cerr<<"ans1:"<<ans<<"\n";
int ans2=0;
st=1,en=ans;
while(st<=en){
int md=(st+en)/2;
if(sum[ans-1]-sum[md-1]<=m){
ans2=md;
en=md-1;
}else{
st=md+1;
}
}
back[i]=ans2-1;
place[i]=ans;
if(ans2==1)dp[i]=0;
else dp[i]=dp[ans2-1]+1;
//cerr<<"i:"<<i<<" "<<ans2<<"\n";
}
//cerr<<m<<" "<<dp[n]<<"\n";
if(dp[n]>k){
return false;
}else{
return true;
}
}
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>n>>k;
for(int i=1;i<n;i++){
int a,b,c;cin>>a>>b>>c;
adj[a].push_back({b,c});
adj[b].push_back({a,c});
w[a]=c;
sum[i]=sum[i-1]+w[i];
}
int st=0,en=2e15;
int opt=0;
//cerr<<"work\n";
while(st<=en){
int m=(st+en)/2;
if(check(m)){
en=m-1;
opt=m;
}else{
st=m+1;
}
}
cout<<opt<<"\n";
check(opt);
int cur=n;
vector<int>v;
while(cur!=0){
//cerr<<cur<<"\n";
v.push_back(place[cur]);
cur=back[cur];
}
for(auto x:v)cout<<x<<" ";
int left=k-v.size();
int cnt=v.size();
if(cnt==k)return 0;
for(int i=1;i<=n;i++){
if(!vis[i])cout<<i<<" ",cnt++;
if(cnt==k)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... |