欢迎来到SFWR的博客

P2325 [SCOI2005]王室联邦

 

 


SPJ

构造一下,用栈记录即可


#include<bits/stdc++.h>
using namespace std;
int sth,head[10000],n,a,b,c,m,ne,sta[10000],cnt,ct[10000],tag[10000];
struct node{int nxt,to;}eg[10000];
void adde(int u,int v)
{
    eg[++ne].nxt=head[u];
    eg[ne].to=v;
    head[u]=ne;
}
void dfs(int u,int fa)
{
    int now=sth;
    for(int i=head[u];i;i=eg[i].nxt)
    if(eg[i].to!=fa)
    {
        dfs(eg[i].to,u);
        if(sth-now>=m)
        {
            ct[++cnt]=u;
            while(sth>now)
            tag[sta[sth--]]=cnt;
        }
    }
    sta[++sth]=u;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<n;i++)
    {cin>>a>>b;adde(a,b);adde(b,a);}
    dfs(1,0);
    if(!cnt)ct[++cnt]=1;
    while(sth)
    tag[sta[sth--]]=cnt;
    cout<<cnt<<endl;
    for(int i=1;i<=n;i++)cout<<tag[i]<<" ";cout<<endl;
    for(int i=1;i<=cnt;i++)cout<<ct[i]<<" ";
}

 

posted @ 2019-09-28 11:51  SFWR  Views(107)  Comments(0Edit  收藏  举报