#include <bits/stdc++.h>
using namespace std;
#define int long long
int const N=2e5+10,LG=19;
vector<pair<int,int>>nei[N]={};
bool ava[N]={};
int h[N]={};
int rch[N]={};
void dfs(int u,int p=0)
{
for (auto [i,w]:nei[u])
{
if (i==p) continue;
h[i]=h[u]+1;
dfs(i,u);
}
}
int mx;
vector<int>g;
int bu(int u,int p=0,int w=0)
{
int n=1e18,x=0;
for (auto [i,w1]:nei[u])
{
if (i==p) continue;
int vl=bu(i,u,w1);
if (ava[i])
n=min(n,vl);
else
x=max(x,vl);
}
if (n+x<=mx)
{
ava[u]=1;
return n+w;
}
if (x+w>mx||p==0)//if it exceeds or is the end
{
ava[u]=1;
g.push_back(u);
return w;
}
ava[u]=0;
return x+w;
}
int n,k;
bool check(int mid)
{
g={};
mx=mid;
bu(1);
return (g.size()<=k);
}
inline void solve()
{
cin>>n>>k;
for (int i=1;i<n;i++)
{
int u,v,w;
cin>>u>>v>>w;
nei[u].push_back({v,w});
nei[v].push_back({u,w});
}
dfs(1);
int st=-1,en=1e15+10;
while (st+1<en)
{
int mid=(st+en)/2;
if (check(mid))
en=mid;
else
st=mid;
}
check(en);
set<int>f;
for (auto i:g)
f.insert(i);
for (int i=1;i<=n;i++)
{
if (f.size()<k)
f.insert(i);
}
cout<<en<<endl;
for (auto i:f)
cout<<i<<' ';
cout<<endl;
}
signed main()
{
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
int t=1;
for (int i=1;i<=t;i++)
{
solve();
}
}
| # | 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... |