Pagini recente » Cod sursa (job #2984671) | Cod sursa (job #2599436) | Cod sursa (job #648072) | Cod sursa (job #2172518) | Cod sursa (job #2418350)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("salvare.in");
ofstream cout ("salvare.out");
int n, k;
int x, y;
int cnt;
vector <int> g[1005];
bool viz[1005];
int dp[1005];
void dfs(int nod, int t, int val) {
int mn = 1000000;
dp[nod] = 0;
for(auto i : g[nod]) {
if(i == t)
continue;
dfs(i, nod, val);
dp[nod] = max(dp[nod], dp[i] + 1);
mn = min(mn, dp[i] + 1);
}
if(dp[nod] == val) {
cnt++;
dp[nod] = -(val + 1);
viz[nod] = 1;
return;
}
if(mn < 0 && -(mn + 1) >= dp[nod])
dp[nod] = mn;
}
int main() {
cin >> n >> k;
for(int i = 1; i < n; i++) {
cin >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
int st = 1, dr = 2 * n, mid;
while(st <= dr) {
mid = (st + dr) >> 1;
dfs(1, 0, mid);
if(dp[1] >= 0)
cnt++, viz[1] = 1;
if(cnt <= k)
dr = mid - 1;
else
st = mid + 1;
cnt = 0;
}
cout << st << "\n";
for(int i = 1; i <= n; i++)
viz[i] = 0;
dfs(1, 0, st);
if(dp[1] >= 0)
cnt++, viz[1] = 1;
cnt = k - cnt;
for(int i = 1; i <= n; i++) {
if(viz[i])
cout << i << " ";
else if(cnt)
cout << i << " ", cnt--;
}
return 0;
}