#9843. 苹果树

    ID: 9843 传统题 1000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>树状数组DFS序子树查询单点翻转

苹果树

题目描述

在卡卡的家门前有一棵苹果树,每个秋天都会结许多苹果。卡卡非常喜欢苹果,所以他总是悉心照料这棵大苹果树。

这棵树有 nn 个分叉点,并且它们之间有树枝连接。卡卡将这些分叉点编号,并且树根的编号总是 11。苹果就长在这些分叉点上,当然一个分叉点不会长出两个及以上的苹果。

卡卡想要知道一棵子树中有多少苹果,以此来了解这棵苹果树的生产能力。现在的麻烦是,有些时候,卡卡会从树上摘下苹果,而有些时候,一个没有苹果的分叉点上又会长出苹果。你能帮卡卡处理这个问题吗?

img

输入格式

输入文件第一行是一个正整数 nn ,代表苹果树的分叉点数。

接下来 n1n-1 行,每行两个整数 uuvv,代表分叉点 uuvv 之间有一根树枝相连。

nn 行包含一个正整数 mm,代表操作的数目。

接下来 mm 行,每行代表一个操作。操作可以是以下两种之一:

(1)C xC~x:代表在分叉点 xx 上的苹果状态被改变了。也就是说,如果之前分叉点 xx 上有苹果,那么现在就被摘掉了;反之,如果以前没有苹果,那么现在就长出了一个苹果。

(2)Q xQ~x:代表查询以分叉点 xx 为根的子树中一共有多少苹果(包括 xx 上的苹果,如果分叉点上 xx 上有苹果的话)一开始,树上长满了苹果。

输出格式

对每个查询,输出一行一个整数,代表该子树上的苹果个数。

3
1 2
1 3
3
Q 1
C 2
Q 1
3
2

样例分析

如上所述。

数据范围与提示

对于 100%100\% 的数据:1n1051 \le n \le 10^51m1051 \le m \le 10^5