Apple Tree树状数组、前向星、DFS序(C语言)

题目

输入值

第一行包含一个整数Ñ(Ñ ≤100,000),这是树中的叉的数量。
接下来的N -1行分别包含两个整数u和v,这意味着fork u和fork v通过分支连接。
下一行包含的整数中号(中号≤100,000)。
以下中号行,每行包含一个消息,该消息或者是
“ Ç X ”,这意味着苹果上叉存在X已经变了。例如,如果叉子上有一个苹果,则卡卡(Kaka)摘下;否则,空叉上会长出一个新苹果。

“ Q x ”,表示查询叉子x上方子树中的苹果数量,包括叉子x上的苹果(如果存在),
请注意,树的开头充满了苹果

输出量

对于每个查询,每行输出相应的答案。
样本输入

3
1 2
1 3
3
Q 1
C 2
Q 1
样本输出

3
2

代码

#include <stdio.h>typedef struct edge{int to;int next;
}Edge;int n,c[100001],head[100001],in[100001],out[100001],ifexist[100001],count = 0;
Edge edge[100001];int lowbit(int index){return index&(-index);
}void addEdge(int father, int son){edge[++count].to = son;edge[count].next = head[father];head[father] = count;
}int sum(int index){int res = 0;while(index>0){res += c[index];index -= lowbit(index);}return res;
}void dfs(int index){in[index] = ++count;for(int i = head[index];i;i=edge[i].next){dfs(edge[i].to);} out[index] = count;
}void update(int index, int add){while(index <= n){c[index] += add;index += lowbit(index);}
}int main(){int m,pre,son,result[10000],cnt = 0,i;char ch;scanf("%d",&n);for(i = 1; i<=n-1; i++){scanf("%d %d",&pre,&son);addEdge(pre,son);}count = 0;dfs(1);for(i = 1; i<=n; i++){update(in[i],1);ifexist[i] = 1;}scanf("%d",&m);for(i = 1; i<=m; i++){getchar();scanf("%c %d",&ch,&pre);if(ch == 'C'){if(ifexist[pre]){update(in[pre],-1);}else{update(in[pre],1);}ifexist[pre] = 1-ifexist[pre];}else if(ch == 'Q'){result[cnt++] = sum(out[pre]) - sum(in[pre] - 1);}}for(i = 0; i<cnt; i++){printf("%d\n",result[i]);}return 0;
}

Apple Tree树状数组、前向星、DFS序(C语言)相关推荐

  1. poj 3321 Apple Tree 树状数组

    http://poj.org/problem?id=3321 一棵树,开始时每个结点都有一个苹果,输入C x表示更新x结点,若x结点有苹果,把该结点苹果摘掉,若该节点无苹果,在该节点上增加一个新的苹果 ...

  2. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2545  Solved: 1419 [Submit][S ...

  3. 【BZOJ2819】Nim 树状数组+LCA

    [BZOJ2819]Nim Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可 ...

  4. 夜深人静写算法(三)- 树状数组

    目录   一.从图形学算法说起       1.Median Filter 概述       2.r pixel-Median Filter 算法 3.一维模型       4.数据结构的设计     ...

  5. 【LCT】【树状数组】Matches Are Not a Child‘s Play(luogu CF1137F)

    正题 luogu CF1137F 题目大意 定义一棵树的产出序列为依次删除权值最小的叶子节点的顺序 进行q此操作: 1.把一个点的权值改为当前树中的最大权值+1 2.查询一个点在删除序列中的位置 3. ...

  6. 树状数组 | 1057

    用哈希,把push的数x作为下标给hashTable(实则不存在,直接用tree树状数组记录数据)+1,pop则是以最后一个数x作为下标-1 . 树状数组和其原理不再赘述,需要注意的是最后的二分搜索( ...

  7. 好骚气的树状数组的解释

    引用请注明出处:http://blog.csdn.net/int64ago/article/details/7429868 写下这个标题,其实心里还是没底的,与其说是写博帖,不如说是做总结.第一个接触 ...

  8. 小魂和他的数列(dp+树状数组优化)

    链接:https://ac.nowcoder.com/acm/contest/3566/C 来源:牛客网 Sometimes, even if you know how something's goi ...

  9. 树状数组再进阶(区间修改+区间查询)

    今天,我们再在树状数组上进一步突破,我们来讲一讲区间修改和区间查询.同样的,这需要各位对树状数组的基本知识有所了解,大家可以看看我的另一篇文章:树状数组趣解. 下面进入正题. 同样的,我还是先给代码, ...

最新文章

  1. 1.IocDI和Spring
  2. 波士顿动力机器狗学会「撒尿」!拉风狗还不上街遛一遛?
  3. 如何破解安卓手机上的图形锁(九宫格锁)
  4. java 获取_java获取类的信息
  5. python中opencv安装_怎么为python安装opencv模块-百度经验
  6. Android --- 两种设置字体加粗的方法
  7. 打用户断点_如何快速测出线缆断点 ?一文了解清楚
  8. git编辑器选哪个_[Git]Git创建和修改代码库
  9. 【C语言进阶深度学习记录】八 C语言中void的分析
  10. python 3.8 新特性 video_1分钟了解:Python3.8 新特性:仅位置参数
  11. LeetCode 810. 黑板异或游戏(博弈推理)
  12. ASP注入漏洞基础教程(二)
  13. 挑战练习10.6 实现高效的RecyclerView刷新
  14. redis分布式客户端中间件
  15. rcmd–App Switcher for Mac快速切换应用程序
  16. 又臭又长的if...else太多了,不知道如何消除?
  17. 计算机网络 IP:ABC类地址与 子网掩码(ABC类网络均有属于自己的私有IP段 节省32位IP资源 ) 网络地址 主机地址 子网 与子网掩码之间的关系换算 IP和子网掩码相互依存
  18. 21个小故事、透过现象看本质
  19. Authing 背后的计算哲学
  20. pandas中的绘图函数(什么是kde)

热门文章

  1. 对于日韩游戏市场及用户的总结思考
  2. mysql 游标当前行,MySQL游标的使用笔记大全
  3. Richard Szeliski 《Computer Vision Algorithms and Applications》Second Edition 计算机视觉算法与应用 第二版
  4. 身份证二要素生成 易语言代码
  5. 修改SAPGUI的默认文件保存/下载路径 - SAP S/4 Basis Tips
  6. 随意取名取字php,取名字不能太随意
  7. linux应用程序固件升级,升级软件包
  8. R语言 echarts4r 不显示图形_9本R语言书,从入门到进阶都在这里了!
  9. 系统权限设计说明文档
  10. 关于 Safari 无法下载 pdf 文件的问题