• 树上分块模板


    BZOJ-1086

    #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;
    }
    View Code
  • 相关阅读:
    愚人节的礼物
    Image Transformation
    Rails
    Google Map
    Code Formatter
    ACboy needs your help again!
    Geek's Collection(幂运算)
    Train Problem I
    Beautiful Meadow
    Card Trick(模拟)
  • 原文地址:https://www.cnblogs.com/MengX/p/11172840.html
Copyright © 2020-2023  润新知