Pagini recente » Cod sursa (job #589923) | Cod sursa (job #2322903) | Cod sursa (job #1537171) | Cod sursa (job #1538959) | Cod sursa (job #2391365)
#include <fstream>
#include <vector>
#define DIM 1010
using namespace std;
ifstream fin ("salvare.in");
ofstream fout ("salvare.out");
int d[DIM],sol[DIM],f[DIM];
int n,k,i,st,dr,mid,el,val,mini,x,y;
vector <int> L[DIM];
void dfs (int nod, int tata, int val){
f[nod] = 1;
mini = 2000000000;
for (int i=0;i<L[nod].size();i++){
int vecin = L[nod][i];
if (!f[vecin]){
dfs (vecin,nod,val);
d[nod] = max (d[nod],d[vecin]+1);
mini = min (mini,d[vecin]+1);
}
}
if (d[nod] == val){ /// trebuie sa punem aici punct de salvare
sol[nod] = 1, el++;
d[nod] = -val-1;
}
if (mini < 0 && -mini >= d[nod]+1) d[nod] = mini;
}
int verif (int val){
for (int i=1;i<=n;i++)
d[i] = sol[i] = f[i] = 0;
mini = 2000000000;
el = 0;
dfs (1,0,val);
if (d[1] >= 0)
sol[1] = 1,el++;
return el;
}
int main (){
fin>>n>>k;
for (i=1;i<n;i++){
fin>>x>>y;
L[x].push_back (y);
L[y].push_back (x);
}
st = 1, dr = n;
while (st <= dr){
mid = (st+dr)/2;
if (verif(mid) <= k)
dr = mid-1;
else st = mid+1;
}
/*for (i=1;i<=n;i++)
d[i] = sol[i] = 0;
el = 0;
dfs (1,st);*/
int x = verif (st);
fout<<st<<"\n";
for (i=1;i<=n;i++){
if (el >= k)
break;
if (!sol[i])
sol[i] = 1, el++;
}
for (i=1;i<=n;i++)
if (sol[i]) fout<<i<<" ";
return 0;
}