zoukankan      html  css  js  c++  java
  • 蓝桥杯模拟赛 青出于蓝而胜于蓝


    dfs序+树状数组
    时间戳相减就是i管辖的范围,有点贪心的思想。
    从最强的人开始,每次添加一个人,那么就把这个人的的树状数组的C[i]加上1.

    例如只有两个,2是1的师傅。

    code:

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn=100010;
    
    int n,m;
    vector<int> edge[maxn];
    int start[maxn*2],end[maxn*2];
    int ret;
    int tree[maxn*2];
    
    
    int lowbit(int t)
    {
        return t&(-t);
    }
    
    void up(int x,int y)
    {
        for(int i=x;i<=n;i+=lowbit(i))
            tree[i]+=y;
    }
    
    int getsum(int x)
    {
        int ans=0;
        for(int i=x;i>0;i-=lowbit(i)) ans+=tree[i];
        return ans;
    }
    
    void dfs(int u,int fa)
    {
        start[u]=++ret;
        int len=edge[u].size();
        for(int i=0;i<len;i++)
        {
            if(edge[u][i]!=fa)
            {
                dfs(edge[u][i],u);
            }
        }
        end[u]=ret;
    }
    int main()
    {
        cin>>n>>m;
        memset(tree,0,sizeof(tree));
        ret=0;
        for(int i=0;i<=n;i++) edge[i].clear();
    
        for(int i=1;i<n;i++)
        {
            int x,y;
            scanf("%d %d",&x,&y);
            edge[x].push_back(y);
            edge[y].push_back(x);
        }
        dfs(m,m);
        for(int i=1;i<=n;i++)
        {
            cout<<getsum(end[i])-getsum(start[i])<<" ";
            up (start[i],1);
        }
        cout<<endl;
        return 0;
    }
    
  • 相关阅读:
    类与继承
    闭包、原型链和继承
    ajax(下)和“承诺”
    ajax(上)
    Ubuntu电源键软关机设置
    金老师语录摘要(七)
    金老师语录摘要(六)
    金老师语录摘要(四)
    金老师语录摘要(三)
    金老师语录摘要(二)
  • 原文地址:https://www.cnblogs.com/Hunter01/p/12482811.html
Copyright © 2011-2022 走看看