Pagini recente » Cod sursa (job #1008539) | Cod sursa (job #2745091) | Cod sursa (job #166421) | Cod sursa (job #1121166) | Cod sursa (job #1513914)
#include <fstream>
#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];
ifstream fin ("salvare.in");
ofstream fout ("salvare.out");
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--;
}
fout << sol << "\n";
for (i=1; i<=n; i++)
if (s[i])
fout << i << " ";
}
int main()
{
int i, x, y;
fin >> n >> k;
for (i=1; i<n; i++)
{
fin >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
dfs(1);
solve();
fin.close();
fout.close();
return 0;
}