Apple Tree树状数组、前向星、DFS序(C语言)
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语言)相关推荐
- poj 3321 Apple Tree 树状数组
http://poj.org/problem?id=3321 一棵树,开始时每个结点都有一个苹果,输入C x表示更新x结点,若x结点有苹果,把该结点苹果摘掉,若该节点无苹果,在该节点上增加一个新的苹果 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 2545 Solved: 1419 [Submit][S ...
- 【BZOJ2819】Nim 树状数组+LCA
[BZOJ2819]Nim Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可 ...
- 夜深人静写算法(三)- 树状数组
目录 一.从图形学算法说起 1.Median Filter 概述 2.r pixel-Median Filter 算法 3.一维模型 4.数据结构的设计 ...
- 【LCT】【树状数组】Matches Are Not a Child‘s Play(luogu CF1137F)
正题 luogu CF1137F 题目大意 定义一棵树的产出序列为依次删除权值最小的叶子节点的顺序 进行q此操作: 1.把一个点的权值改为当前树中的最大权值+1 2.查询一个点在删除序列中的位置 3. ...
- 树状数组 | 1057
用哈希,把push的数x作为下标给hashTable(实则不存在,直接用tree树状数组记录数据)+1,pop则是以最后一个数x作为下标-1 . 树状数组和其原理不再赘述,需要注意的是最后的二分搜索( ...
- 好骚气的树状数组的解释
引用请注明出处:http://blog.csdn.net/int64ago/article/details/7429868 写下这个标题,其实心里还是没底的,与其说是写博帖,不如说是做总结.第一个接触 ...
- 小魂和他的数列(dp+树状数组优化)
链接:https://ac.nowcoder.com/acm/contest/3566/C 来源:牛客网 Sometimes, even if you know how something's goi ...
- 树状数组再进阶(区间修改+区间查询)
今天,我们再在树状数组上进一步突破,我们来讲一讲区间修改和区间查询.同样的,这需要各位对树状数组的基本知识有所了解,大家可以看看我的另一篇文章:树状数组趣解. 下面进入正题. 同样的,我还是先给代码, ...
最新文章
- 1.IocDI和Spring
- 波士顿动力机器狗学会「撒尿」!拉风狗还不上街遛一遛?
- 如何破解安卓手机上的图形锁(九宫格锁)
- java 获取_java获取类的信息
- python中opencv安装_怎么为python安装opencv模块-百度经验
- Android --- 两种设置字体加粗的方法
- 打用户断点_如何快速测出线缆断点 ?一文了解清楚
- git编辑器选哪个_[Git]Git创建和修改代码库
- 【C语言进阶深度学习记录】八 C语言中void的分析
- python 3.8 新特性 video_1分钟了解:Python3.8 新特性:仅位置参数
- LeetCode 810. 黑板异或游戏(博弈推理)
- ASP注入漏洞基础教程(二)
- 挑战练习10.6 实现高效的RecyclerView刷新
- redis分布式客户端中间件
- rcmd–App Switcher for Mac快速切换应用程序
- 又臭又长的if...else太多了,不知道如何消除?
- 计算机网络 IP:ABC类地址与 子网掩码(ABC类网络均有属于自己的私有IP段 节省32位IP资源 ) 网络地址 主机地址 子网 与子网掩码之间的关系换算 IP和子网掩码相互依存
- 21个小故事、透过现象看本质
- Authing 背后的计算哲学
- pandas中的绘图函数(什么是kde)
热门文章
- 对于日韩游戏市场及用户的总结思考
- mysql 游标当前行,MySQL游标的使用笔记大全
- Richard Szeliski 《Computer Vision Algorithms and Applications》Second Edition 计算机视觉算法与应用 第二版
- 身份证二要素生成 易语言代码
- 修改SAPGUI的默认文件保存/下载路径 - SAP S/4 Basis Tips
- 随意取名取字php,取名字不能太随意
- linux应用程序固件升级,升级软件包
- R语言 echarts4r 不显示图形_9本R语言书,从入门到进阶都在这里了!
- 系统权限设计说明文档
- 关于 Safari 无法下载 pdf 文件的问题