Pagini recente » Cod sursa (job #1841560) | Cod sursa (job #2134688) | Cod sursa (job #1249822) | Cod sursa (job #1966795) | Cod sursa (job #1472878)
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#define maxN 1002
#define inf 1000000000
using namespace std;
int n, nr, i, j, k, maxd, d[maxN];
bool vis[maxN], hc[maxN], Hc[maxN];
vector < int > V[maxN];
void read()
{
int x, y;
freopen("salvare.in", "r", stdin);
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);
}
}
void dfs(int x)
{
int i, minv = inf, sons = 0;
vis[x] = 1;
d[x] = - inf;
for (i = 0; i < V[x].size(); ++ i)
if (!vis[V[x][i]])
{
++ sons;
dfs(V[x][i]);
minv = min(minv, d[V[x][i]] + 1);
if (!hc[x] && d[V[x][i]] + 1 >= maxd)
{
d[x] = - (maxd + 1);
hc[x] = 1;
++ nr;
}
else
if (!hc[x])
d[x] = max(d[x], d[V[x][i]] + 1);
}
if (!hc[x] && d[x] + minv + 1 <= 0)
d[x] = minv;
if (!sons)
d[x] = 0;
}
int ok(int x)
{
maxd = x;
memset(vis, 0, sizeof(vis));
memset(hc, 0, sizeof(hc));
memset(d, 0, sizeof(d));
nr = 0;
dfs(1);
if (d[1] >= 0)
{
hc[1] = 1;
++ nr;
}
return nr <= k;
}
int bs()
{
int i = n, p = 1 << 9;
while (p)
{
if (i - p > 0 && ok(i - p))
{
i -= p;
memcpy(Hc, hc, sizeof(hc));
}
p /= 2;
}
return i;
}
void write()
{
int nr;
freopen("salvare.out", "w", stdout);
printf("%d\n", bs());
i = 1;
while (nr < k && i <= n)
{
if (!Hc[i])
{
Hc[i] = 1;
++ nr;
}
++ i;
}
for (i = 1; i <= n; ++ i)
if (Hc[i])
printf("%d ", i);
}
int main()
{
read();
write();
}