王室联邦

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int head[maxn],To[maxn<<2],Next[maxn<<2];
int n,b,cnt,type,top;
int Stack[maxn],ans[maxn],belong[maxn];
void add(int u,int v){
Next[++cnt]=head[u];
head[u]=cnt;
To[cnt]=v;
}
void dfs(int u,int fa){
int now=top;
for(int i=head[u];i;i=Next[i]){
int v=To[i];
if(v==fa) continue;
dfs(v,u);
if(top-now>=b){
ans[++type]=u;
while(top!=now){
belong[Stack[top--]]=type;
}
}
}
Stack[++top]=u;
}
int main(){
scanf("%d %d",&n,&b);
for(int i=1;i<n;i++){
int u,v;
scanf("%d %d",&u,&v);
add(u,v);
add(v,u);
}
dfs(1,0);
while(top) belong[Stack[top--]]=type;
cout<<type<<"
";
for(int i=1;i<=n;i++){
cout<<belong[i]<<" ";
}
cout<<"
";
for(int i=1;i<=type;i++){
cout<<ans[i]<<" ";
}
return 0;
}

  

原文地址:https://www.cnblogs.com/cutemush/p/12802426.html