http://poj.org/problem?id=3321

刚一看题以为要建一颗树 看了下讨论说dfs

这里dfs遍历时设的标号很好 一个low一个high 包含了以这一节点为根节点的子树结点的所有标号

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define N 100010
#define lowbit(x) (x&(-x))
struct node
{
int u,v,next;
}ed[N<<];
int head[N],t,low[N],g,high[N],vis[N],re[N],f[N];
void init()
{
t = ;
memset(head,-,sizeof(head));
}
void add(int u,int v)
{
ed[t].u = u;
ed[t].v = v;
ed[t].next = head[u];
head[u] = t;
t++;
}
void dfs(int u)
{
low[u] = ++g;
vis[u] = ;
int i;
for(i = head[u] ; i != - ; i = ed[i].next)
{
int v = ed[i].v;
if(!vis[v])
dfs(v);
}
high[u] = g;
}
void add1(int i,int da)
{
while(i<=g)
{
re[i]+=da;
i+=lowbit(i);
}
}
int getsum(int i)
{
int sum = ;
while(i)
{
sum+=re[i];
i-=lowbit(i);
}
return sum;
}
int main()
{
int i,j,k,n,m,a,b;
char s[];
init();
scanf("%d",&n);
for(i = ; i < n ; i++)
{
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
dfs();
for(i = ; i <= g ; i++)
{
f[i] = -;
add1(i,);
}
scanf("%d",&m);
while(m--)
{
scanf("%s %d",s,&k);
if(s[]=='Q')
{
printf("%d\n",getsum(high[k])-getsum(low[k]-));
}
else
{
add1(low[k],f[k]);
f[k] = f[k]*-;
}
}
return ;
}

poj3321Apple Tree(树状数组)的更多相关文章

  1. HDU3333 Turing Tree 树状数组+离线处理

    Turing Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. POJ 3321 Apple Tree(树状数组)

                                                              Apple Tree Time Limit: 2000MS   Memory Lim ...

  3. HDU 3333 - Turing Tree (树状数组+离线处理+哈希+贪心)

    题意:给一个数组,每次查询输出区间内不重复数字的和. 这是3xian教主的题. 用前缀和的思想可以轻易求得区间的和,但是对于重复数字这点很难处理.在线很难下手,考虑离线处理. 将所有查询区间从右端点由 ...

  4. POJ--3321 Apple Tree(树状数组+dfs(序列))

    Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 22613 Accepted: 6875 Descripti ...

  5. gym 100589A queries on the Tree 树状数组 + 分块

    题目传送门 题目大意: 给定一颗根节点为1的树,有两种操作,第一种操作是将与根节点距离为L的节点权值全部加上val,第二个操作是查询以x为根节点的子树的权重. 思路: 思考后发现,以dfs序建立树状数 ...

  6. POJ 3321:Apple Tree 树状数组

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 22131   Accepted: 6715 Descr ...

  7. E - Apple Tree(树状数组+DFS序)

    There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree. ...

  8. POJ3321 Apple Tree(树状数组)

    先做一次dfs求得每个节点为根的子树在树状数组中编号的起始值和结束值,再树状数组做区间查询 与单点更新. #include<cstdio> #include<iostream> ...

  9. HDU4836 The Query on the Tree(树状数组&&LCA)

    由于智力的问题,百度之星完全lu不动..开场看第一题根据题目给的条件我觉得一定是可以构造出来的,题目给的意思颇有鸽巢原理的感觉,于是觉得开场第一题应该就是智力构造题了,想了半个小时,发现完全想不动,于 ...

  10. HDU 3333 Turing Tree (树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3333 题意就是询问区间不同数字的和. 比较经典的树状数组应用. //#pragma comment(l ...

随机推荐

  1. SQL Server如何使用XML格式传输解析

    Sqlserver in 实现 参数化查询 XML类型解决方案 [转] :如果参数是int类型: declare @a xml set @a=' <row><id>1</ ...

  2. Apache多站点设定

    多端口 vi httpd.conf Listen 8090 <VirtualHost *:8090> ServerName localhost Documentroot "/Us ...

  3. SQL存储过程和触发器

    一. 存储过程 1.  有关概念 存储过程是由SQL语句及控制流语句组成的集合.调用一个存储过程,可以一次性地执行过程中的所有语句.从这一点来说,它类似于程序. 存储过程由用户建立,它作为数据库的一个 ...

  4. Hibernate 关联 set 和 list 对比

    这里考虑的不是hibernate配置文件相关的list和set.而是实际注入的java集合. 1.就单纯java集合的效率对比 list要比set效率高,因为set是把元素存在map的key所在位置上 ...

  5. Pop Sequence (栈)

     Pop Sequence (栈) Given a stack which can keep M numbers at most. Push N numbers in the order of 1, ...

  6. Nginx简单性能调优

    Nginx默认没有开启利用多核CPU (忍不住吐槽,然怪总感觉服务器性能没充分发挥), 我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU.CPU是任务处理,计算最关键 ...

  7. JSON操作,转载

    http://www.cnblogs.com/mcgrady/archive/2013/06/08/3127781.html#_label0

  8. Hibernate从入门到精通(三)Hibernate配置文件

    在上次的博文Hibernate从入门到精通(二)Hibernate实例演示我们已经通过一个实例的演示对Hibernate的基本使用有了一个简单的认识,这里我们在此简单回顾一下Hibernate框架的使 ...

  9. 格式化说明符定义、转义字符、枚举、结构体、typedef

    1.格式化说明符定义: %i,%d:输出十进制整型数 %6d:输出十进制整型数,至少6个字符宽 %li,%ld:输出长整数 %u:输出无符号整数 %lu:输出无符号长整数(相当于:unsigned l ...

  10. UITextField监听文字输入事件

    [textField addTarget:self action:@selector(textFieldDidChange:)forControlEvents:UIControlEventEditin ...