Pagini recente » Cod sursa (job #968076) | Cod sursa (job #203942) | Cod sursa (job #1694233) | Cod sursa (job #1937233) | Cod sursa (job #355491)
Cod sursa(job #355491)
#include<stdio.h>
#include<string.h>
#define Nmx 1001
int n,k,fol[Nmx],f;
int grd[Nmx],min[Nmx];
int coada[Nmx],gr[Nmx];
int rt[Nmx];
struct nod
{
int inf;
int use;
nod *urm;
};
nod *G[Nmx];
void add(int x,int y)
{
nod *aux;
aux=new nod;
aux->urm=G[x];
aux->use=0;
aux->inf=y;
G[x]=aux;
}
void citire()
{
int x,y;
scanf("%d%d",&n,&k);
for(int i=1;i<n;++i)
{
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
gr[x]++;gr[y]++;
coada[i]=0;
}
}
int solve(int M)
{
int st=1,x,dr=0,nr=0,ok=0,drf=0;
memset(coada,0,sizeof(coada));
for(int i=1;i<=n;++i)
{if(grd[i]==1)
{
coada[++dr]=i;
min[i]=M;
}
for(nod *p=G[i];p!=NULL;p=p->urm)
p->use=0;
}
while(st<=dr)
{
x=coada[st];
for(nod *p=G[x];p!=NULL;p=p->urm)
if(p->use==0)
{
p->use=1;
if(min[x]-1<min[p->inf])
min[p->inf]=min[x]-1;
grd[p->inf]--;
if(grd[p->inf]==1)
{coada[++dr]=p->inf;
if(min[p->inf]==0)
{ min[p->inf]=M+1;
nr++;
rt[p->inf]=1;
}
}
}
++st;
}
return nr;
}
int main()
{
freopen("salvare.in","r",stdin);
freopen("salvare.out","w",stdout);
citire();
int x;
for(int i=1;i<=n;++i)
{
for(int i=1;i<=n;++i)
{
grd[i]=gr[i];
min[i]=Nmx+1;
rt[i]=0;
}
x=solve(i);
if(x<=k)
{
printf("%d\n",i);
for(int j=1;j<=n;j++)
if(rt[j]==1)
printf("%d ",j);
for(int j=x+1;j<=k;++j)
for(int i=1;i<=n;++i)
if(rt[i]==0)
{
printf("%d ",i);
break;
}
return 0;
}
}
return 0;
}