Pagini recente » Cod sursa (job #2155232) | Cod sursa (job #296850) | Cod sursa (job #454938) | Cod sursa (job #357584) | Cod sursa (job #173655)
Cod sursa(job #173655)
#include <cstdio>
using namespace std;
#define FIN "salvare.in"
#define FOUT "salvare.out"
#define MAX_N 1005
#include <vector>
vector <int> G[MAX_N];
int N, K, H, d, s;
int A[MAX_N];
int g[MAX_N];
int C[MAX_N];
int index[MAX_N];
int B[MAX_N];
int solve(int x)
{
int i, j, ii, t = 0;
s = -1;
for (i = 0; i <= N - 1; ++i)
{
g[i] = G[i].size();
index[i] = 0, B[i] = x + 1, A[i] = x;
if(g[i] <= 1)
index[i] = 2, C[++s] = i, A[i] = x;
}
for (d = 0; d <= s; ++d)
{
i = C[d];
if(A[i] == 0)
t++, index[i] = 1, B[i]=0;
for (ii = 0; ii <= G[i].size() - 1; ++ii)
{
j = G[i][ii];
g[j]--;
if(g[j] <= 1 && !index[j])
C[++s]=j, index[j]=2;
if(B[i] > A[i])
A[j] = min(A[j], A[i]-1);
B[j] = min(B[j], B[i]+1);
}
}
if(A[C[s]] <=x && B[i] > A[i])
t++, index[ C[s] ]=1;
for (i = 0; i <= N - 1; ++i)
{
if(K < t) return 0;
if(K == t) return 1;
if(index[i] != 1) index[i] = 1, t++;
}
}
int main()
{
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d %d", &N, &K);
int i, x, y;
for (i = 1; i < N; ++i)
{
scanf("%d %d",&x, &y), --x, --y;
G[x].push_back(y), G[y].push_back(x);
}
for(i = 10; i >= 0; --i)
if(!solve(H + (1 << i))) H += 1 << i; solve(H + 1);
printf("%d\n", H + 1);
for (i = 0; i <= N - 1; ++i) if(index[i] == 1) printf("%d ",i + 1);
return 0;
}