Pagini recente » Cod sursa (job #656354) | Cod sursa (job #1408115) | Cod sursa (job #2544033) | Cod sursa (job #1459233) | Cod sursa (job #2418355)
#include <bits/stdc++.h>
using namespace std;
ifstream in("salvare.in");
ofstream out("salvare.out");
const int N = 1e3+5;
int dist[N],n,k;
bool placed[N],viz[N];
vector<int> v[N],ans;
void dfs(int x, int p)
{
viz[x] = 1;
for (auto it: v[x])
{
if (!viz[it])
{
dfs(it,p);
dist[x] = max(dist[x],1+dist[it]);
}
}
if (dist[x] == p)
{
placed[x] = 1;
dist[x] = 0;
}
}
void Update()
{
ans.clear();
int cnt = k;
for (int i = 1; i<=n; i++)
if (placed[i])
{
ans.push_back(i);
cnt--;
}
for (int i = 1; i<=n; i++)
{
if (!cnt)
break;
if (!placed[i])
{
ans.push_back(i);
cnt--;
}
}
}
int main()
{
in >> n >> k;
for (int i = 1; i<n; i++)
{
int x,y;
in >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
int st = 1, dr = n,Max = -1;
while (st<=dr)
{
int mj = (st+dr)/2, cnt = 0;
memset(viz,0,sizeof(viz));
memset(dist,0,sizeof(dist));
memset(placed,0,sizeof(placed));
dfs(1,mj);
for (int i = 1; i<=n; i++)
if (placed[i])
cnt++;
if (cnt<=k)
{
Max = mj;
Update();
dr = mj-1;
}
else
st = mj+1;
}
out << Max << "\n";
sort(ans.begin(),ans.end());
for (auto it: ans)
out << it << " ";
}