题目描述
有一棵N个结点的树,一开始每个结点上都有一个苹果,每次有两种操作:
(1)C x:如果x结点上有一个苹果,那么摘下它,否则x节点上会再生出一个苹果;
(2)Q x:询问以x结点为根的子树中苹果的个数;
你要对于每个Q操作,输出对应的答案。
输入格式
第一行为一个数N,表示树的结点个数,默认以1为根;
接下来N-1行,每行两个数Ui,Vi,表示一条树边;
然后一行是一个数M,表示操作数目,接下来M行为M个操作,格式如题所述。
输出格式
对于每个Q操作,输出对应的答案,一个操作一行。
样例数据
样例输入
3
1 2
1 3
3
Q 1
C 2
Q 1
样例输出
3
2
题目分析
题目要高效动态维护一个子树,怎么办呢?
利用Dfs将树转为第一种欧拉序,保存入出队的时间戳。
那么用树状数组维护欧拉序即可。
源代码
#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cst