Pagini recente » Cod sursa (job #1827107) | Cod sursa (job #606338) | Cod sursa (job #841992) | Cod sursa (job #223942) | Cod sursa (job #2957266)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in ("salvare.in");
ofstream out ("salvare.out");
const int max_size = 1e3 + 1, INF = 1e9 + 1;
bool estesol[max_size];
int d[max_size], n, m, k;
vector <int> mc[max_size], noduri;
void dfs (int nod, int par)
{
int mx = 0, mn = INF;
for (auto f : mc[nod])
{
if (f != par)
{
dfs(f, nod);
mx = max(mx, d[f]);
mn = min(mn, d[f]);
}
}
d[nod] = mx;
if (d[nod] == m)
{
d[nod] = -m - 1;
noduri.push_back(nod);
}
else
{
if (mn < 0 && d[nod] < -mn)
{
d[nod] = mn;
}
}
}
bool check ()
{
for (int i = 1; i <= n; i++)
{
d[i] = 0;
}
noduri.clear();
dfs(1, 0);
if (d[1])
{
noduri.push_back(1);
}
return (noduri.size() <= k);
}
int main ()
{
in >> n >> k;
for (int i = 1; i < n; i++)
{
int x, y;
in >> x >> y;
mc[x].push_back(y);
mc[y].push_back(x);
}
int ans = 0, st = 1, dr = 1000;
while (st <= dr)
{
m = (st + dr) / 2;
if (check())
{
ans = m;
dr = m - 1;
}
else
{
st = m + 1;
}
}
out << ans << '\n';
m = ans;
bool mata = check();
for (auto f : noduri)
{
estesol[f] = 1;
}
k -= noduri.size();
for (int i = 1; i <= n; i++)
{
if (!estesol[i])
{
noduri.push_back(i);
k--;
if (k == 0)
{
break;
}
}
}
sort(noduri.begin(), noduri.end());
for (auto f : noduri)
{
out << f << " ";
}
in.close();
out.close();
return 0;
}