zoukankan      html  css  js  c++  java
  • POJ 3321 Apple Tree

        树状数组。

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    using namespace std;
    #define N 100010
    
    int vis[N],have[N];
    int low[N],high[N];
    int c[N];
    vector< vector<int> > edge(N);
    int n,now;
    
    int lowbit(int x)
    {
        return x&(-x);
    }
    
    void init()
    {
        int i;
        for(i=1;i<N;i++)
        {
            have[i] = 1;
            c[i] = lowbit(i);
        }
        memset(vis,0,sizeof(vis));
        now = 1;
        return;
    }
    
    void modify(int x)
    {
        int val;
        if(have[x])
        {
            have[x] = 0;
            val = -1;
        }
        else
        {
            have[x] = 1;
            val = 1;
        }
        while(x<=n)
        {
            c[x] += val;
            x += lowbit(x);
        }
    }
    
    void dfs(int v)
    {
        vis[v] = 1;
        low[v] = now;
        for(int i=0;i<edge[v].size();i++)
        {
            if(!vis[edge[v][i]])
            {
                dfs(edge[v][i]);
            }
        }
        high[v] = now;
        now++;
    }
    
    int sum(int x)
    {
        int res = 0;
        while(x>0)
        {
            res += c[x];
            x -= lowbit(x);
        }
        return res;
    }
    
    int main()
    {
        int i,a,b,q,v;
        char ss[5];
        init();
        scanf("%d",&n);
        for(i=1;i<=n-1;i++)
        {
            scanf("%d%d",&a,&b);
            edge[a].push_back(b);
            edge[b].push_back(a);
        }
        dfs(1);
        scanf("%d",&q);
        while(q--)
        {
            scanf("%s",ss);
            if(ss[0] == 'Q')
            {
                scanf("%d",&v);
                printf("%d
    ",sum(high[v])-sum(low[v]-1));
            }
            else
            {
                scanf("%d",&v);
                modify(high[v]);
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    AIX系统/var/adm/wtmp大文件处理
    script & scriptreplay
    Ubuntu/Debianpxe/isopreseed
    Ubuntu12.04安装gimp-2.8
    Ubuntu 3D特效一览
    Unix history图览
    Undelete Files on Linux Systems
    开源界有趣的循环缩写和LOGO
    Ubuntu上的dock
    linux下歌曲、视频、文件等乱码
  • 原文地址:https://www.cnblogs.com/whatbeg/p/3534091.html
Copyright © 2011-2022 走看看