题目链接

题意:一开始1-n都有苹果,Q查询以x为根下存在多少。

树状数组+DFS+队列转换

这题纠结了2天,一开始一点思路都没有,看大神都是吧树状数组转换成队列来做

看了好久都不知道怎么转换的,

解决方法:用两个队列,一个是以记录(s,u),s为起点,一个记录s,为终点

用DFS查找一棵分支,记录访问次序,这样就可以转换成树状数组了

#include <cstdio> //参照大神的代码
#include <cstring>
using namespace std;
#define N 500000
int tree[N],b[N],e[N],head[N]; //b记录DFS访问的次序,e表示当前节点DFS的最后一个节点标号
bool h[N],v[N]; //v[i]表示是否被访问过
int num;
struct node
{
int x,next;
}a[N];
inline int lowbit(int x) {return x&-x;}
void update(int x,int t)
{
int n;
if(h[t]) {h[t]=false;n=-1;} //false 表示没有
else {h[t]=true;n=1;}
while(x<=num)
{
tree[x]+=n;
x+=lowbit(x);
}
}
int getsum(int x)
{
int ans=0;
while(x>0)
{
ans+=tree[x];
x-=lowbit(x);
}
return ans;
}
void dfs(int x)
{
v[x]=true;
b[x]=++num;
for(int i=head[x];i!=-1;i=a[i].next)
{
if(!v[a[i].x])
dfs(a[i].x);
}
e[x]=num;
//printf("%d %d %d\n",x,num,b[x]);
}
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
int m=0;
memset(tree,0,sizeof(tree));
memset(head,-1,sizeof(head));
for(i=1;i<n;i++)
{
int s,u;
scanf("%d%d",&s,&u);
m++;
a[m].x=u;a[m].next=head[s];head[s]=m;
m++;
a[m].x=s;a[m].next=head[u];head[u]=m;
}
memset(v,false,sizeof(v));
memset(b,0,sizeof(b));
memset(e,0,sizeof(e));
num=0;
dfs(1);
for(i=1;i<=n;i++)
{
update(b[i],i);
h[i]=true;
}
char str[10];
int t,mm;
scanf("%d",&mm);
for(i=1;i<=mm;i++)
{
scanf("%s%d",str,&t);
if(str[0]=='C')
update(b[t],t);
else
printf("%d\n",getsum(e[t])-getsum(b[t]-1));
}
}
return 0;
}

poj 3321的更多相关文章

  1. poj 3321 Apple Trie

    /* poj 3321 Apple Trie 这道题的关键是如何将一个树建成一个一维数组利用树状数组来解题! 可以利用dfs()来搞定,我们在对一个节点深搜后,所经过的节点的数目就是该节点的子树的数目 ...

  2. POJ 3321 Apple Tree(DFS序+线段树单点修改区间查询)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 25904   Accepted: 7682 Descr ...

  3. POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)

    POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...

  4. POJ - 3321 Apple Tree (线段树 + 建树 + 思维转换)

    id=10486" target="_blank" style="color:blue; text-decoration:none">POJ - ...

  5. 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 ...

  6. POJ 3321 Apple Tree (树状数组+dfs序)

    题目链接:http://poj.org/problem?id=3321 给你n个点,n-1条边,1为根节点.给你m条操作,C操作是将x点变反(1变0,0变1),Q操作是询问x节点以及它子树的值之和.初 ...

  7. poj 3321 Apple Tree(一维树状数组)

    题目:http://poj.org/problem?id=3321 题意: 苹果树上n个分叉,Q是询问,C是改变状态.... 开始的处理比较难,参考了一下大神的思路,构图成邻接表 并 用DFS编号 白 ...

  8. POJ 3321 Apple Tree dfs+二叉索引树

    题目:http://poj.org/problem?id=3321 动态更新某个元素,并且求和,显然是二叉索引树,但是节点的标号不连续,二叉索引树必须是连续的,所以需要转化成连续的,多叉树的形状已经建 ...

  9. Hdu 3887 Counting Offspring \ Poj 3321 Apple Tree \BZOJ 1103 [POI2007]大都市meg

    这几个题练习DFS序的一些应用. 问题引入: 给定一颗n(n <= 10^5)个节点的有根树,每个节点标有权值,现有如下两种操作: 1.C x y     以节点x的权值修改为y. 2.Q x ...

  10. POJ 3321 Apple Tree 【树状数组+建树】

    题目链接:http://poj.org/problem?id=3321 Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submiss ...

随机推荐

  1. 【转】ubuntu14.04 trusty的源

    原文网址:http://blog.chinaunix.net/uid-15041-id-4821715.html 一.编辑更新源文件:/etc/apt/sources.list二.更新源索引文件:ap ...

  2. NOI2015

    D1T1 并查集. #include<cstdio> #include<cstdlib> #include<iostream> #include<fstrea ...

  3. hdu4778:状压dp+博弈

    题目大意: 有g种不同颜色的小球,b个袋子,每个袋子里面有若干个每种小球 两人轮流取袋子,当袋子里面的同色小球有s个时,会合并成一个魔法球,并被此次取袋子的人获得 成功获得魔法球的人可以再次取 求二者 ...

  4. euctb

  5. DBA避坑宝典:Oracle运维中的那些事儿

    对于Oracle运维中的那些事儿,我的最终目的:不是比谁更惨,而是能够从中吸取经验和教训. 从我的理解来看,我会从下面的几个方面来进行说明DBA运维中的一些事儿. 每个部分都是非常关键的,缺一不可,而 ...

  6. Phoenix二级索引(Secondary Indexing)的使用

    摘要 HBase只提供了一个基于字典排序的主键索引,在查询中你只能通过行键查询或扫描全表来获取数据,使用Phoenix提供的二级索引,可以避免在查询数据时全表扫描,提高查过性能,提升查询效率   测试 ...

  7. [Cycle.js] Generalizing run() function for more types of sources

    Our application was able to produce write effects, through sinks, and was able to receive read effec ...

  8. .NET基础拾遗(4)委托和事件1

    一.委托初窥:一个拥有方法的对象 (1)本质:持有一个或多个方法的对象:委托和典型的对象不同,执行委托实际上是执行它所“持有”的方法. (2)如何使用委托? ①声明委托类型(delegate关键字) ...

  9. 限制内容长度(CSS,jQuery)

    CSS(宽度限制在100px之内,超出就会点点点) <style type="text/css"> p{width: 100px;display: inline-blo ...

  10. 让DIV垂直居中的几种办法

    1.使用CSS3 的伸缩盒布局 <!doctype html> <html> <head> <meta charset="utf-8"&g ...