Pagini recente » Cod sursa (job #385508) | Cod sursa (job #249086) | Cod sursa (job #2019472) | Cod sursa (job #1352085) | Cod sursa (job #1571058)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1010;
int N, K;
int nodes[NMAX];
vector<int> G[NMAX];
int DFS(int node, int from, int curr, int max) {
int ret = 0;
if (curr == 1)
nodes[node] = ret = 1;
for (int next : G[node]) {
if (next == from)
continue;
ret += DFS(next, node, curr % (max + 1) + 1, max);
}
return ret;
}
int main() {
ios_base::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
assert(freopen("salvare.in", "r", stdin) != NULL);
assert(freopen("salvare.out", "w", stdout) != NULL);
assert(freopen("debug.err", "w", stderr) != NULL);
#endif
int i, j, x, y;
cin >> N >> K;
for (i = 0; i < N - 1; ++i) {
cin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
int left = 0, right = N, mid = (left + right), sol = -1;
while (left <= right) {
bool ok = 0;
for (int root = 1; root <= N; ++root)
if (DFS(root, -1, 1, mid) <= K) {
ok = 1;
break;
}
if (ok) {
sol = mid;
right = mid - 1;
} else
left = mid + 1;
mid = (left + right) / 2;
}
cout << sol << '\n';
for (int root = 1; root <= N; ++root) {
memset(nodes, 0, sizeof(nodes));
int num = K - DFS(root, -1, 1, sol);
if (num < 0)
continue;
for (i = 1; i <= N; ++i)
if (nodes[i] == 1)
cout << i << ' ';
else if (num) {
--num;
cout << i << ' ';
}
cout << '\n';
break;
}
return 0;
}