Pagini recente » Cod sursa (job #2367648) | Cod sursa (job #658592) | Cod sursa (job #2424350) | Cod sursa (job #918172) | Cod sursa (job #1513915)
#include <cstdio>
#include <vector>
#define pb push_back
using namespace std;
const int nmax = 1005;
const int inf = (1<<29);
vector <int> g[nmax];
int n, k, dad[nmax], st[nmax], top, sol, t;
bool viz[nmax], s[nmax];
int d[nmax], v[nmax];
void dfs(int nod)
{
int i, son;
viz[nod]=1;
for(i=0; i<g[nod].size(); i++)
{
son=g[nod][i];
if (!viz[son])
{
dad[son]=nod;
dfs(son);
}
}
st[++top]=nod;
}
bool ok(int x)
{
int i, j, nod, son;
t=0;
for (i=1; i<=n; i++)
{
nod=st[i];
s[nod]=0;
d[nod]=inf;
v[nod]=x;
for(j=0; j<g[nod].size(); j++)
{
son=g[nod][j];
if (dad[son]==nod)
{
d[nod]=min(d[nod], d[son]+1);
v[nod]=min(v[nod], v[son]-1);
}
}
if(v[nod]>=d[nod])
v[nod]=inf;
else if(nod==1 || v[nod]<=0)
{
s[nod]=1;
d[nod]=0;
v[nod]=inf;
t++;
}
}
if(t<=k) return true;
return false;
}
int bin_search()
{
int i, step=(1<<10);
for (i=-1; step; step=step>>1)
if (!ok(i+step))
i=i+step;
return i+1;
}
void solve()
{
sol=bin_search();
ok(sol);
int i, cnt=k-t;
for (i=1; i<=n && cnt; i++)
if (!s[i])
{
s[i]=1;
cnt--;
}
printf("%d\n", sol);
for (i=1; i<=n; i++)
if (s[i]) printf("%d ", i);
}
int main()
{
freopen("salvare.in", "r", stdin);
freopen("salvare.out", "w", stdout);
int i, x, y;
scanf("%d %d", &n, &k);
for (i=1; i<n; i++)
{
scanf("%d %d", &x, &y);
g[x].push_back(y);
g[y].push_back(x);
}
dfs(1);
solve();
fclose(stdin);
fclose(stdout);
return 0;
}