Pagini recente » Cod sursa (job #3140776) | Cod sursa (job #2301978) | Cod sursa (job #1577737) | Cod sursa (job #2562966) | Cod sursa (job #57548)
Cod sursa(job #57548)
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<vector>
#define vi vector <int>
#define pb push_back
#define vii vector <int> :: iterator
using namespace std;
const int maxn = 2010;
int i;
int k;
vi vect1;
int x;
int y;
int j;
int n;
vi vect[maxn];
int ver[maxn];
int dist[maxn];
int niv[maxn];
int num;
int l;
void dfs(int i,int prop)
{
vii it;
for(it = vect[i].begin();it != vect[i].end();++it)
{
int x = *it;
if (ver[*it] == 0)
{
ver[*it] = i;
dfs(*it,prop);
}
}
dist[i] = 1000000;
for(it = vect[i].begin();it != vect[i].end(); ++it)
{
int x = *it;
if (ver[i] == *it) continue;
niv[i] = max(niv[*it] + 1,niv[i]);
dist[i] = min(dist[*it] + 1,dist[i]);
}
/* if (dist[i] == 1000000)
{
dist[i] = 0;
} */
if (niv[i] >= l)
{
++num;
dist[i] = 0;
niv[i] = 0;
if (prop == 1) vect1.pb(i);
}
if (dist[i] + niv[i] < l)
{
dist[i] = 0;
niv[i] = 0;
}
}
int veri(int x,int prop)
{
num = 0;
l = x;
for(i = 1;i <= n; ++i)
{
ver[i] = 0;
niv[i] = 0;
dist[i] = 0;
}
ver[1] = 1;
dfs(1,prop);
return num > k;
}
int main()
{
freopen("salvare.in","r",stdin);
freopen("salvare.out","w",stdout);
scanf("%d %d",&n,&k);
for(i = 1;i < n; ++i)
{
scanf("%d %d",&x,&y);
vect[x].pb(y);
vect[y].pb(x);
}
int p = 1;
x = 0;
for(p = 1;p <= n; p <<= 1);
for(;p;p >>= 1)
{
if (veri(x + p, 0))
{
x += p;
}
}
if (x == 0 && veri(x,0))
{
x = -1;
}
veri(x + 1,1);
int n1 = vect1.size();
while (n1 < k)
{
int x = rand() % (n + 1);
vect1.pb(x);
n1++;
}
sort(vect1.begin(),vect1.end());
vii it;
printf("%d\n",x + 1);
// printf("%d\n",vect1.size());
for(it = vect1.begin();it != vect1.end(); ++it)
{
printf("%d ",*it);
}
return 0;
}