Pagini recente » Cod sursa (job #2125324) | Cod sursa (job #3281251) | Cod sursa (job #1607513) | Cod sursa (job #1074840) | Cod sursa (job #71090)
Cod sursa(job #71090)
#include <stdio.h>
#include <vector>
#include <string>
using namespace std;
#define maxn 1010
#define pb push_back
int n,k,d,sum,sol;
vector <int> a[maxn];
int g[maxn],used[maxn],c[maxn],rez[maxn],s[maxn];
void DFS(int nod)
{
int i,found=0;
used[nod]=1;
for (i=0;i<g[nod];i++)
if (!used[a[nod][i]])
{
found=1;
DFS(a[nod][i]);
if (c[a[nod][i]]+1>c[nod]) c[nod]=c[a[nod][i]]+1;
}
if (!found) c[nod]=d+1;
if (c[nod]==2*d+1)
{
c[nod]=0;
sum++;
}
}
int works()
{
sum=0;
memset(used,0,sizeof(used));
memset(c,0,sizeof(c));
DFS(1);
if (c[1]>d) sum++;
return sum;
}
int main()
{
freopen("salvare.in","r",stdin);
freopen("salvare.out","w",stdout);
scanf("%d %d ",&n,&k);
int front=0,middle,back=n,i,x,y;
for (i=1;i<n;i++)
{
scanf("%d %d ",&x,&y);
a[x].pb(y);
a[y].pb(x);
}
for (i=1;i<=n;i++) g[i]=a[i].size();
while (front<=back)
{
d=(front+back)/2;
if (works()<=k)
{
sol=d;
memcpy(rez,s,sizeof(s));
back=d-1;
}
else front=d+1;
}
printf("%d\n",sol);
for (i=1;i<=k;i++) printf("%d ",rez[i]);
printf("\n");
return 0;
}