zoukankan      html  css  js  c++  java
  • dsu on tre模板

    /*
    询问每个节点子树上的颜色数
    */
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+5;
    struct edge{
        int v,next;
    }E[maxn<<1];
    int head[maxn],tot=0;
    void addedge(int u,int v){
        E[++tot].v=v;
        E[tot].next=head[u];
        head[u]=tot;
    }
    int son[maxn],sz[maxn];
    void dfs1(int u,int fa){//预处理重儿子
        sz[u]=1;
        for(int i=head[u];i;i=E[i].next){
            int v=E[i].v;
            if(v!=fa){
                dfs1(v,u);
                if(sz[v]>sz[son[u]])son[u]=v;
                sz[u]+=sz[v];
            }
        }
    }
    int a[maxn];
    int cnt[maxn],ans[maxn],cur;
    int Bigson;
    void add(int u,int fa,int val){//暴力统计轻子树
        if(!cnt[a[u]])cur++;
        cnt[a[u]]+=val;
        if(!cnt[a[u]])cur--;
        for(int i=head[u];i;i=E[i].next){
            int v=E[i].v;
            if(v!=fa && v!=Bigson){
                add(v,u,val);
            }
        }
    }
    void dfs2(int u,int fa,int opt){
        for(int i=head[u];i;i=E[i].next){
            int v=E[i].v;
            if(v!=fa && v!=son[u])dfs2(v,u,0);//轻儿子计算完毕后要消除影响
        }
        if(son[u])dfs2(son[u],u,1),Bigson=son[u];//重儿子影响保留
        add(u,fa,1);//暴力统计轻儿子贡献(和u)
        ans[u]=cur;
        Bigson=0;
        if(!opt)add(u,fa,-1);
    }
    int main () {
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n-1;i++){
            int u,v;
            scanf("%d%d",&u,&v);
            addedge(u,v);
            addedge(v,u);
        }
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        dfs1(1,0);
        cur=0;
        dfs2(1,0,1);
        int m;scanf("%d",&m);
        for(int i=1;i<=m;i++){
            int x;
            scanf("%d",&x);
            printf("%d
    ",ans[x]);
        }
    }
    
  • 相关阅读:
    SQL Server 性能优化之RML Utilities:快速入门(Quick Start)(1)
    sp_rename sqlserver 表 列 索引 类型重命名
    T- SQL性能优化详解
    sql-索引的作用(超详细)
    用一条SQL语句取出第 m 条到第 n 条记录的方法
    SARG
    git
    ssh
    70小事
    websocket
  • 原文地址:https://www.cnblogs.com/ucprer/p/14019912.html
Copyright © 2011-2022 走看看