【POJ 3321】Apple Tree【树状数组&DFS】

本文介绍了一道编程题目,涉及到一棵苹果树的子树中苹果数量的查询和修改。卡卡需要知道在苹果树的各个子树中苹果的总数,题目要求处理苹果的增减操作和查询操作。解决方案是通过DFS遍历树并记录节点的DFS序号,然后使用树状数组来快速计算区间和,以高效地响应查询。
摘要由CSDN通过智能技术生成

苹果树

时限: 2000MS 内存限制: 65536K

描述

卡卡家门外有一棵苹果树。每年秋天,树上都会种很多苹果。卡卡非常喜欢苹果,因此他一直在精心培育大苹果树。

该树有N个分支,这些分支由分支连接。Kaka用1到N对叉进行编号,并且根始终用1编号。在叉上将生长苹果,而在同一叉上将不会生长两个苹果。卡卡想了解子树中有多少苹果,以便研究苹果树的生产能力。

问题在于,有时空叉上会长出一个新苹果,卡卡可能会从树上摘下一个苹果作为甜点。你能帮卡卡吗?

在这里插入图片描述

输入项

第一行包含一个整数Ñ(Ñ ≤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

分析:

对这颗进行 d f s dfs dfs遍历 并记录每一个点的 d f s dfs dfs序号 ( s t [ i ] ) (st[i]) (st[i])
在一个节点的所有儿子都被遍历过后 记录当前 e n [ i ] en[i] en[i]为当前最大 d f s dfs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值