제출 #1330397

#제출 시각아이디문제언어결과실행 시간메모리
1330397secondaccountmaybeParkovi (COCI22_parkovi)C++20
110 / 110
1128 ms35004 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
vector<pair<ll,ll>>v[201000];
ll m,u,f[201000],g[201000],n,k;
ll f_func(ll x,ll p)
{
	if(v[x].size()==1&&x!=0)
	{
		return 0;
	}
	ll i=1LL<<60,a=-(1LL<<60);
	for(auto t:v[x])
	{
		ll y=t.first;
		ll d=t.second;
		if(y==p)
		{
			continue;
		}
		ll r=f_func(y,x);
		if(r==0&&f[y]==1)
		{
			i=min(i,0LL);
			a=max(a,0LL);
			continue;
		}
		if(r<0&&r+d<=0)
		{
			f[x]=1;
		}
		if(r<0&&r+d>0)
		{
			r=0;
		}
		else
		{
			r+=d;
		}
		if(r>m)
		{
			u++;
			g[y]=1;
			r=min(-m+d,0LL);
			if(-m+d<=0)
			{
				f[x]=1;
			}
			f[y]=1;
		}
		a=max(a,r);
		i=min(i,r);
	}
	if(-i>=a)
	{
		return i;
	}
	return a;
}
int main()
{
	cin>>n>>k;
	for(ll i=0;i<n-1;++i)
	{
		ll a,b,c;
		cin>>a>>b>>c;
		a--;
		b--;
		v[a].push_back({b,c});
		v[b].push_back({a,c});
	}
	ll h=0,j=1LL<<60;
	while(h<j)
	{
		m=(h+j)/2;
		u=0;
		for(ll i=0;i<n;++i)
		{
			f[i]=0;
			g[i]=0;
		}
		if(f_func(0,0)>0)
		{
			g[0]=1;
			u++;
		}
		else if(f[0]==0)
		{
			g[0]=1;
			u++;
		}
		if(u<=k)
		{
			j=m;
		}
		else
		{
			h=m+1;
		}
	}
	m=h;
	u=0;
	for(ll i=0;i<n;++i)
	{
		f[i]=0;
		g[i]=0;
	}
	if(f_func(0,0)>0)
	{
		g[0]=1;
		u++;
	}
	else if(f[0]==0)
	{
		g[0]=1;
		u++;
	}
	cout<<h<<endl;
	vector<ll>o;
	for(ll i=0;i<n;++i)
	{
		if(g[i]==1)
		{
			o.push_back(i+1);
		}
	}
	for(ll i=0;i<n;++i)
	{
		if(o.size()<k&&g[i]==0)
		{
			o.push_back(i+1);
		}
	}
	for(ll x:o)
	{
		cout<<x<<" ";
	}
	cout<<endl;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...