Pagini recente » Cod sursa (job #1519149) | Cod sursa (job #2061866) | Cod sursa (job #1620175) | Cod sursa (job #123782) | Cod sursa (job #1775706)
#include <bits/stdc++.h>
#define maxN 1005
#define INF (1<<30)
using namespace std;
bool seen[maxN];
int dp[maxN];
vector<int>v[maxN],tempsol,sol;
int n,i,j,x,y,k,dist;
int st,dr,mij,ans;
void dfs(int nod,int tata)
{
int bst=INF;
for(vector<int>::iterator it=v[nod].begin();it!=v[nod].end();it++)
if(*it!=tata)
dfs(*it,nod),
dp[nod]=max(dp[nod],dp[*it]+1),
bst=min(bst,dp[*it]+1);
if(dp[nod]==dist)
{
tempsol.push_back(nod);
dp[nod]=-dist;
return;
}
if(bst<0 && -bst>=dp[nod])
dp[nod]=bst;
}
bool verif(int val)
{
dist=val;
memset(dp,0,sizeof(dp));
tempsol.clear();
dfs(1,0);
if((int)tempsol.size()<=k)
return true;
return false;
}
int main()
{
freopen("salvare.in","r",stdin);
freopen("salvare.out","w",stdout);
scanf("%d%d",&n,&k);
for(i=1;i<n;i++)
scanf("%d %d",&x,&y),
v[x].push_back(y),
v[y].push_back(x);
st=0,dr=n;
while(st<=dr)
{
mij=st+(dr-st)/2;
if(verif(mij))
ans=mij,sol=tempsol,dr=mij-1;
else st=mij+1;
}
printf("%d\n",ans);
for(i=0;i<sol.size();i++)
seen[sol[i]]=true;
for(i=1;i<=n;i++)
if(seen[i])
printf("%d ",i);
else if(sol.size()<k)
k--,printf("%d ",i);
return 0;
}