Pagini recente » Cod sursa (job #1420758) | Cod sursa (job #1906777) | Cod sursa (job #805806) | Cod sursa (job #444388) | Cod sursa (job #2398400)
#include<bits/stdc++.h>
using namespace std;
const int maxN=(1e3+5);
vector<int> v[maxN];
vector<int> points;
int dp[maxN];
bool p[maxN];
int n,k;
void dfs(int nod,int fat,int d)
{
dp[nod]=d;
for(auto it:v[nod])
{
if(it==fat) continue;
dfs(it,nod,d);
dp[nod]=min(dp[nod],dp[it]-1);
}
if(!dp[nod])
{
points.push_back(nod);
p[nod]=1;
dp[nod]=2*d;
}
}
inline int f(int val)
{
memset(dp,0,sizeof(dp));
points.clear();
memset(p,0,sizeof(p));
deque<int> q;
dfs(1,0,val);
if((int)points.size()>k) return 0;
for(int i=1;i<=n;i++)
if(!p[i]) q.push_back(i);
while((int)points.size()<k)
{
int nod=q.front();
q.pop_front();
points.push_back(nod);
}
return k;
}
int main()
{
freopen("salvare.in","r",stdin);
freopen("salvare.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=1;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
int sol=0;
int st=1,dr=n;
while(st<=dr)
{
int mid=(st+dr)>>1;
if(f(mid)==k)
{
sol=mid;
dr=mid-1;
}
else
{
st=mid+1;
}
}
int x=f(sol);
printf("%d\n",sol);
sort(points.begin(),points.end());
for(auto it:points)
printf("%d ",it);
printf("\n");
return 0;
}