出自——博客园-zhouzhendong

~去博客园看该题解~

题目

POJ3321 Apple Tree

题意概括

有一颗01树,以结点1为树根,一开始所有的结点权值都是1,有两种操作:

  1.改变其中一个结点的权值(0变1,1变0)

  2.询问子树X的节点权值和。

输入描述

一组数据。

先是一个数n,表示有n个节点。

接下去n-1行,每行表示一条边。

然后一个数m,表示有m个操作。

然后m行,每行一个字母一个数x,如果字母是Q,则是询问;否则是修改。

输出描述

每一个询问一行,表示答案。

题解

直接把题目变成dfs序上单点修改和区间sum询问的问题。

单点修改,不用线段树,树状数组就可以了。

如果你非要用线段树我也不拦你……

代码

#pragma comment(linker,"/STACK:1024000000,1024000000")
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=+,M=N*;
struct Edge{
int cnt,y[M],nxt[M],fst[N];
void set(){
cnt=;
memset(fst,,sizeof fst);
}
void add(int a,int b){
y[++cnt]=b,nxt[cnt]=fst[a],fst[a]=cnt;
}
}e;
int n,m;
int in[N],out[N],time;
int tree[N],v[N];//树状数组
int lowbit(int x){
return x&-x;
}
void dfs(int prev,int rt){
in[rt]=++time;
for (int i=e.fst[rt];i;i=e.nxt[i])
if (e.y[i]!=prev)
dfs(rt,e.y[i]);
out[rt]=time;
}
void update(int x,int d){
for (;x<=n;x+=lowbit(x))
tree[x]+=d;
}
int sum(int x){
int ans=;
for (;x>;x-=lowbit(x))
ans+=tree[x];
return ans;
}
int query(int L,int R){
return sum(R)-sum(L-);
}
int main(){
e.set();
scanf("%d",&n);
for (int i=,a,b;i<n;i++){
scanf("%d%d",&a,&b);
e.add(a,b);
e.add(b,a);
}
time=;
dfs(,);
for (int i=;i<=n;i++)
tree[i]=lowbit(i),v[i]=;
scanf("%d",&m);
for (int i=,x;i<=m;i++){
char ch[];
scanf("%s%d",ch,&x);
if (ch[]=='Q')
printf("%d\n",query(in[x],out[x]));
else
update(in[x],-v[x]*),v[x]^=;
}
return ;
}

POJ3321Apple Tree Dfs序 树状数组的更多相关文章

  1. Codeforces Round #225 (Div. 1) C. Propagating tree dfs序+树状数组

    C. Propagating tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/383/p ...

  2. Codeforces Round #225 (Div. 1) C. Propagating tree dfs序+ 树状数组或线段树

    C. Propagating tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/383/p ...

  3. [poj3321]Apple Tree(dfs序+树状数组)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 26762   Accepted: 7947 Descr ...

  4. [Split The Tree][dfs序+树状数组求区间数的种数]

    Split The Tree 时间限制: 1 Sec  内存限制: 128 MB提交: 46  解决: 11[提交] [状态] [讨论版] [命题人:admin] 题目描述 You are given ...

  5. POJ 3321 Apple Tree DFS序 + 树状数组

    多次修改一棵树节点的值,或者询问当前这个节点的子树所有节点权值总和. 首先预处理出DFS序L[i]和R[i] 把问题转化为区间查询总和问题.单点修改,区间查询,树状数组即可. 注意修改的时候也要按照d ...

  6. Codeforces Round #381 (Div. 2) D. Alyona and a tree dfs序+树状数组

    D. Alyona and a tree time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  7. HDU 5293 Tree chain problem 树形dp+dfs序+树状数组+LCA

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 题意: 给你一些链,每条链都有自己的价值,求不相交不重合的链能够组成的最大价值. 题解: 树形 ...

  8. POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)

    http://poj.org/problem?id=3321 http://acm.hdu.edu.cn/showproblem.php?pid=3887 POJ 3321: 题意:给出一棵根节点为1 ...

  9. HDU 5293 Annoying problem 树形dp dfs序 树状数组 lca

    Annoying problem 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 Description Coco has a tree, w ...

随机推荐

  1. cache、session、cookie的区别

    session把数据保存在服务器端,每一个用户都有属于自己的Session,与别人的不冲突就是说,你登陆系统后,你的信息(如账号.密码等)就会被保存在服务器上一个单独的session中,当你退出系统后 ...

  2. ASP.NET MVC5入门3之登录验证

    参考: HTML页面模版: http://www.ui.cn/detail/70262.html(第38个) MVC后台代码参考: http://www.oschina.net/p/nfine 开发环 ...

  3. bootstrap 3列表单布局

    <form class="form-horizontal" role="form"> <fieldset> <legend> ...

  4. 洛谷P3246 [HNOI2016]序列 [莫队]

    传送门 思路 看到可离线.无修改.区间询问,相信一定可以想到莫队. 然而,莫队怎么转移是个大问题. 考虑\([l,r]\rightarrow[l,r+1]\)时答案会怎样变化?(左端点变化时同理) \ ...

  5. CDH 元数据库升级

    元数据库设计到的服务:scm库:server  hive库:hive  amon库:cloudera management服务 元数据库要从5.7.24升级到5.7.25,为了避免升级失败导致 集群不 ...

  6. aview安装和使用

    一.安装aalibwget https://sourceforge.net/projects/aa-project/files/latest/download?source=files --no-ch ...

  7. Confluence 6 使用页面请求属性来对慢性能进行问题解决

    这个页面告诉你如何启用页面请求属性.当这个属性启用以后,你可以查看在 Confluence 任何页面完成的一个记录消耗的时间(毫秒).如果 Confluence 反应缓慢的话,一个关于慢页面请求的内部 ...

  8. Java的动手动脑(四)

    日期:2018.10.18 星期四 博客期:019 Part1:回答为啥会报错 答案:当然会报错啦!因为平常的编程过程中,系统会对我们写的类自动生成一个默认无参形式的构造方法,类似于C++中的体制!这 ...

  9. 【python】查找函数定义

    help(函数名) 举例:想知道gevnet.Timeout这个函数是怎么用的.help(gevent.Timeout). 之前不知道这样查,每次遇到新函数想知道有哪些参数我都要到网上疯狂查阅文档.现 ...

  10. Nginx详解十二:Nginx场景实践篇之跨站访问相关

    跨站访问 浏览器请求一个页面的时候,发送了两个域名的请求 此情况不安全,容易出现CSRF攻击,所以浏览器禁止跨域访问 Nginx设置打开跨站访问 配置语法:add_header name value ...