Pagini recente » Cod sursa (job #2960798) | Cod sursa (job #1711779) | Cod sursa (job #2479896) | Cod sursa (job #2116372) | Cod sursa (job #2390466)
#include <fstream>
#include <iostream>
#include <vector>
#include <bitset>
using namespace std;
ifstream fin("salvare.in");
ofstream fout("salvare.out");
int n,k,i,j,m,v[1001],cnt,st,dr,d;
vector <int> l[1001];
bitset <1001> f;
void dfs(int nod){
f[nod]=1;
int x=l[nod].size(),vecin;
bool y=0;
v[nod]=d*3;
for(int i=0;i<x;i++){
vecin=l[nod][i];
if(!f[vecin]){
dfs(vecin);
v[nod]=min(v[nod],v[vecin]-1);
y=1;
}
}
if(!y)
v[nod]=d;
if(v[nod]==0){
cnt++;
v[nod]=2*d+1;
}
}
int main(){
fin>>n>>k;
for(m=1;m<n;m++){
fin>>i>>j;
l[i].push_back(j);
l[j].push_back(i);
}
if(k>=n){
fout<<0<<"\n";
for(i=1;i<=n;i++)
fout<<i<<" ";
return 0;
}
st=0; dr=n;
while(st<=dr){
d=(st+dr)/2;
cnt=0;
dfs(1);
///cout<<d<<" "<<cnt<<"\n";
if(cnt<=k)
dr=d-1;
else
st=d+1;
f.reset();
for(i=1;i<=n;i++)
v[i]=0;
}
fout<<st<<"\n";
cnt=0;
d=st;
dfs(1);
for(i=1;i<=n && cnt<k;i++)
if(v[i]!=2*st+1){
v[i]=2*st+1;
cnt++;
}
for(i=1;i<=n;i++){
///cout<<v[i]<<" ";
if(v[i]==2*st+1)
fout<<i<<" ";
}
return 0;
}