#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 1010
using namespace std;
int sta[N];
int n,b,cnt;
int head[N];
int root[N];
int belong[N];
bool v[N];
int tot,top;
struct node
{
int from,to,next;
}edge[N<<1];
void init()
{
memset(head,-1,sizeof(head));
cnt=1;
}
void edgeadd(int from,int to)
{
edge[cnt].to=to;
edge[cnt].next=head[from];
head[from]=cnt++;
}
void dfs(int now)
{
v[now]=1;
int bot=top;
for(int i=head[now];i!=-1;i=edge[i].next)
{
int to=edge[i].to;
if(v[to])continue;
dfs(to);
if(top-bot>=b)
{
tot++;
root[tot]=now;
do
{
belong[sta[top]]=tot;
top--;
}while(top!=bot);
}
}
sta[++top]=now;
}
int main()
{
init();
scanf("%d%d",&n,&b);
for(int i=1;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
edgeadd(x,y);
edgeadd(y,x);
}
dfs(1);
while(top)
{
belong[sta[top--]]=tot;
}
cout<<tot<<endl;
for(int i=1;i<n;i++)cout<<belong[i]<<‘ ‘;
cout<<belong[n]<<endl;
for(int i=1;i<tot;i++)cout<<root[i]<<‘ ‘;
cout<<root[tot]<<endl;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wzq_qwq/article/details/47297885