蜗牛在山坡上爬行。它悄悄爬上富士山顶,想要下山。山坡上有一套路径系统,构成了一棵有根二叉树。
这棵树包含 $n$ 个顶点,由 $n-1$ 条路径连接。山顶是树的根。在某些顶点处路径结束,这些顶点是树的叶子。除了叶子之外,从每个顶点向下坡方向恰好引出两条路径,一条通向左侧,另一条通向右侧。
蜗牛想要从根节点出发,沿树向下爬行,到达其中一个叶子节点。它将沿着路径向下移动。在路径上的每个顶点,蜗牛可以选择两个方向之一继续下行:向左或向右。
蜗牛可以在根节点选择任意两个方向之一开始下行。在随后的每个顶点,如果蜗牛选择的方向与它在上一顶点选择的方向不同,则视为完成了一次“转弯”。
由于转弯对蜗牛来说很不方便,因此在从根节点到叶子节点的整个路径上,蜗牛最多愿意进行 $k$ 次转弯。
我们将树的顶点从 $1$ 到 $n$ 编号,根节点的编号为 $1$。给定 $q$ 个查询。每个查询由一个顶点 $u_i$ 描述。你需要求出:如果蜗牛从根节点出发,进行不超过 $k$ 次转弯,且路径必须经过顶点 $u_i$,那么它最终能到达的叶子节点有多少个。
输入格式
第一行包含三个整数 $n, k$ 和 $q$ —— 树的顶点数、蜗牛愿意进行的最大转弯次数以及查询次数 ($3 \le n \le 200\,000$; $0 \le k \le n$; $1 \le q \le 200\,000$)。
接下来的 $n$ 行描述了这棵树。第 $i$ 行首先给出一个整数 $t_i$ —— 从第 $i$ 个顶点引出的路径数量 ($t_i = 0$ 或 $t_i = 2$)。如果 $t_i = 2$,则该行后面紧跟两个整数 $l_i$ 和 $r_i$ —— 分别是从顶点 $i$ 出发的左侧和右侧路径所指向的顶点编号 ($1 \le l_i, r_i \le n$)。保证此描述对应于一棵以 $1$ 为根的有根二叉树。
接下来的 $q$ 行包含查询。第 $i$ 行包含一个整数 $u_i$ —— 路径必须经过的顶点编号 ($1 \le u_i \le n$)。
输出格式
对于每个查询,在新的一行输出答案 —— 即满足从根节点出发、向下爬行、路径上转弯次数不超过 $k$ 且经过顶点 $u_i$ 的条件下,蜗牛能够到达的叶子节点数量。
子任务
| 子任务 | 分值 | 附加限制 | 依赖子任务 |
|---|---|---|---|
| 1 | 11 | $n \le 500, q \le 500$ | |
| 2 | 12 | $n \le 500, q \le 500$ | 1 |
| 3 | 10 | $k = n$ | |
| 4 | 14 | $k = 0$ | |
| 5 | 19 | 所有查询中 $u_i$ 均为叶子 | 1 |
| 6 | 34 | 无附加限制 | 1–5 |
样例
输入 1
7 1 4 2 2 4 0 2 6 5 2 3 7 0 0 0 1 4 3 5
输出 1
3 2 1 0
说明
(a) 样例中的树结构。
(b) 蜗牛必须经过顶点 1,它可以到达叶子 2, 6 和 7。
(c) 蜗牛必须经过 4,它可以到达 6 和 7。
(d) 蜗牛必须经过 3,它只能到达叶子 6。
(e) 蜗牛必须经过 5,但到达该顶点的路径已经包含超过一次转弯。因此,不存在满足所有限制并能让蜗牛完成路径的叶子。