Submission #1300958

#TimeUsernameProblemLanguageResultExecution timeMemory
1300958Muhammad_AneeqParkovi (COCI22_parkovi)C++20
110 / 110
676 ms45812 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...