【Codevs1228】苹果树(dfs序+树状数组)

原创 2016年05月30日 11:57:52
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100010;
int n,m,a1,a2,in[maxn],out[maxn],head[maxn],ncnt,cnt,c[maxn],vis[maxn];
struct edge{
    int to,ne;
}e[maxn];

inline int lowbit(int x){return x&(x^(x-1));}

void add(int x,int y){
    e[++ncnt].to=y;
    e[ncnt].ne=head[x];
    head[x]=ncnt;
}

void dfs(int x){//深搜生成dfs序 
    in[x]=++cnt;//进的时间戳 
    for(int i=head[x];i;i=e[i].ne){
        dfs(e[i].to);
    }
    out[x]=cnt;//出的时间戳 
}

void change(int x,int k){
    while(x<=n){
        c[x]+=k;
        x+=lowbit(x);
    }
}

int query(int x){
    int ans=0;
    while(x){
        ans+=c[x];
        x-=lowbit(x); 
    }
    return ans;
}

void init(){
    for(int i=1;i<=n;i++){
        change(in[i],1);
        vis[i]=1;//每一个节点都有苹果 
    }
}

int main(){
    cin>>n;
    for(int i=1;i<n;i++){
        scanf("%d%d",&a1,&a2);
        add(a1,a2);
    }
    vis[n]=1;
    dfs(1);
    init();
    cin>>m;
    while(m--){
        char ch;
        int x;
        cin>>ch;
        cin>>x;
        if(ch=='C'){
            if(vis[x]){
                change(in[x],-1);
            }else{
                change(in[x],1);
            }
            vis[x]=!vis[x];
        }else{
            printf("%d\n",query(out[x])-query(in[x]-1));
        }
    }
    return(0);
}

POJ3321[苹果树]--DFS序+树状数组

poj3321
  • CHNWJD
  • CHNWJD
  • 2017年07月09日 14:35
  • 379

CodeVS1228 苹果树【DFS序】【树状数组】

CodeVS 1228
  • theljt
  • theljt
  • 2017年09月10日 20:52
  • 82

codevs1228 苹果树(dfs序&&(线段树||树状数组))

题目描述 Description 在卡卡的房子外面,有一棵苹果树。每年的春天,树上总会结出很多的苹果。卡卡非常喜欢吃苹果,所以他一直都精心的呵护这棵苹果树。我们知道树是有很多分叉点的,苹果会长在...
  • update7
  • update7
  • 2017年08月02日 10:38
  • 12961

【codevs1228】苹果树【线段树+dfs序】

题目描述 Description 在卡卡的房子外面,有一棵苹果树。每年的春天,树上总会结出很多的苹果。卡卡非常喜欢吃苹果,所以他一直都精心的呵护这棵苹果树。我们知道树是有很多分叉点的,苹果会长在枝条...
  • sunshinezff
  • sunshinezff
  • 2015年05月14日 16:37
  • 689

[dfs序 树状数组] BZOJ 4034 [HAOI2015]T2

两个log可以树链剖分 day2听课时惊闻一个log的做法 但我打low了,并不快... #include #include #include #define V G[p].v using...
  • u014609452
  • u014609452
  • 2016年04月27日 19:52
  • 348

POj 3321 树状数组苹果树

There is an apple tree outside of kaka’s house. Every autumn, a lot of apples will grow in the tree....
  • Littlewhite520
  • Littlewhite520
  • 2016年12月22日 00:34
  • 233

POJ 3321(dfs序+树状数组)

题意:一棵苹果树有n个结点,编号从1到n,根结点永远是1。该树有n-1条树枝,每条树枝连接两个结点。已知苹果只会结在树的结点处,而且每个结点最多只能结1个苹果。初始时每个结点处都有1个苹果。树的主人接...
  • u012350533
  • u012350533
  • 2014年04月17日 17:24
  • 789

Codevs1228苹果树

http://codevs.cn/problem/1228/思路 这个题咋一看就会想到树链剖分,但事实上,我们只需要将树链剖分中,由DFS序确定树上节点在数据结构中的对应位置的方法提取出来。用每个点...
  • qq_36693533
  • qq_36693533
  • 2017年11月02日 19:34
  • 42

【CODE[VS]】1228 苹果树 树状数组

题目传送门为什么我拿到这题的第一反应是树剖啊……我到底在想些什么啊然而这题被分类在树状数组里,于是我就把想法往树状数组上靠,依然没有任何思路于是我放弃了树状数组的解法,想用树剖暴艹这题。却突然惊讶的发...
  • lyfsb
  • lyfsb
  • 2017年12月13日 20:44
  • 80

poj3321--Apple Tree(多叉树建树状数组)

Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 19425   Ac...
  • u013015642
  • u013015642
  • 2014年10月07日 20:54
  • 1474
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Codevs1228】苹果树(dfs序+树状数组)
举报原因:
原因补充:

(最多只允许输入30个字)