Pagini recente » Cod sursa (job #1676460) | Cod sursa (job #2720941) | Cod sursa (job #1774393) | Cod sursa (job #2216732) | Cod sursa (job #1473515)
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#define maxN 1002
#define inf 1000000000
using namespace std;
int n, nr, 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 = 0, maxv = 0, sons = 0, node;
vis[x] = 1;
for (i = 0; i < V[x].size(); ++ i)
if (!vis[node = V[x][i]])
{
++ sons;
dfs(node);
minv = min(minv, d[node]);
maxv = max(maxv, d[node]);
}
if (!sons)
{
d[x] = 1;
return ;
}
if (-minv >= maxv + 1)
d[x] = minv + 1;
else
{
d[x] = maxv + 1;
if (d[x] == maxd + 1 || x == 1)
{
d[x] = - maxd;
hc[x] = 1;
++ nr;
}
}
}
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);
return nr <= k;
}
int bs()
{
int i = n, p = 1 << 9;
while (p)
{
if (i - p > 0 && ok(i - p))
{
memset(Hc, 0, sizeof(Hc));
Nr = nr;
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;
nr = Nr;
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();
}