Pagini recente » jc2015-runda2 | Cod sursa (job #2643684) | Cod sursa (job #466070) | Cod sursa (job #961573) | Cod sursa (job #1775630)
#include <bits/stdc++.h>
#define maxN 1005
#define INF (1<<30)
using namespace std;
bool seen[maxN];
int dp[maxN],need[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)
{
dp[nod]=INF,need[nod]=dist;
for(vector<int>::iterator it=v[nod].begin();it!=v[nod].end();it++)
if(*it!=tata)
{
dfs(*it,nod);
dp[nod]=min(dp[nod],dp[*it]+1);
need[nod]=min(need[nod],need[*it]-1);
}
if(dp[nod]<=need[nod])
need[nod]=INF;
if(!need[nod])
dp[nod]=0,need[nod]=INF,
seen[nod]=true;
}
bool verif(int val)
{
dist=val;
int cnt=0;
memset(seen,false,sizeof(seen));
dfs(1,0);
for(i=1;i<=n;i++)
if(seen[i])
cnt++;
if(cnt<=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,dr=mij-1;
else st=mij+1;
}
printf("%d\n",ans);
for(i=1;i<=n;i++)
if(seen[i])
sol.push_back(i);
for(i=1;i<=n&&sol.size()<k;i++)
if(!seen[i])
sol.push_back(i);
for(size_t i=0;i<sol.size();i++)
printf("%d ",sol[i]);
return 0;
}