QOJ.ac

QOJ

时间限制: 2.0 s 内存限制: 256 MB 总分: 100 可 Hack ✓

#12135. 徒步旅行者

统计

在阿拉木图大城市附近,有一座壮丽的山峰,吸引了许多徒步旅行者。这座山可以描述为一棵包含 $n$ 个节点的树$^\dagger$。树的每个节点都是一个平坦的表面,徒步旅行者可以在那里放松和休息。节点 1 是山顶,也是最终目的地。除了山顶外,从每个编号为 $v$ 的节点出发,都有一条向上的路径通往某个其他节点 $u < v$。因此,如果你从任何节点出发并持续向上走,最终都会到达山顶。这完全符合树的结构。

在一个美好的周日早晨,$m$ 个不同的徒步旅行者群体决定征服这座山。每个群体由目前占据山上一片连通区域的徒步旅行者组成。该区域可以正式描述为树的一个连通子图$^\dagger$。你知道目前还没有任何群体相遇,因此在特定的节点 $v$ 上,只能有属于同一个群体的成员。

时光流逝,群体正向山顶移动。他们的移动可以描述为 $q$ 个事件的序列。每个事件由树上的一个任意节点 $v$ 给定。当前位于 $v$ 下方$^\dagger$ 任何节点的每一位徒步旅行者,都会沿着路径向上移动,向树的更高处前进。注意,位于节点 $v$ 的徒步旅行者将停留在该节点。

在某个事件之后,来自不同群体的两个人可能会在同一个节点相遇。在这种情况下,这两个群体会互相认识,并从那一刻起作为一个单一的群体继续徒步旅行。

作为徒步旅行者移动的远方观察者,你感到很有趣的是,有些群体会很早相遇,而另一些群体可能直到到达山顶才会相遇。在 $q$ 个事件中的每一个事件之后,你都想知道:现在还有多少个不同的徒步旅行者群体?

$^\dagger$ 树是一个包含 $n$ 个节点和 $n-1$ 条边的连通无向图。 $^\dagger$ 树的连通子图是其节点的一个子集(群体),且该子集也构成一棵树。 $^\dagger$ 如果 $v$ 在从 $u$ 到山顶的路径上,则称节点 $u$ 位于节点 $v$ 的下方。

输入格式

第一行包含一个整数 $n$ —— 树的节点数,或者说是山上平坦表面的数量 ($3 \le n \le 3 \cdot 10^5$)。

第二行包含一个由 $n-1$ 个整数组成的序列 $p_2, \dots, p_n$。值 $p_i$ 表示节点 $i$ 的父节点,即从 $i$ 到山顶路径上的下一个节点 ($1 \le p_i < i$)。

下一行包含一个整数 $m$ —— 徒步旅行者群体的数量 ($2 \le m \le n$)。

接下来的 $m$ 行,每行描述一个群体。第一个整数 $k$ 是该群体的大小。随后是 $k$ 个整数 $l_1, \dots, l_k$,描述了每个群体成员的位置 ($1 \le k \le 3 \cdot 10^5, 1 \le l_i \le n$)。保证每个群体都占据树的一个有效的连通子图。同时保证所有占据同一个节点的徒步旅行者都属于同一个群体。

徒步旅行者的总数 $\sum k$ 不超过 $3 \cdot 10^5$。

下一行包含一个整数 $q$ —— 事件的数量 ($1 \le q \le 3 \cdot 10^5$)。

最后一行包含 $q$ 个整数 $v_1, \dots, v_q$ —— 描述每个事件的节点 ($1 \le v_i \le n$)。每个事件的详细描述见上文。

输出格式

你需要输出 $q$ 行,每行包含一个整数 —— 每次事件后不同群体的数量。

子任务

子任务 附加约束 分值
0 样例 0
1 $n, q, \sum k \le 10^3$ 12
2 $p_i = \lfloor \frac{i}{2} \rfloor$ 且 $n = 2^k - 1$ (对于某个 $k$) 13
3 $p_i = i - 1$ 18
4 所有事件中 $v_i = 1$ 14
5 $n, q, \sum k \le 10^5$ 24
6 19

样例

输入 1

7
1 1 1 4 4 6
3
2 3 3
1 5
3 7 6 7
4
6 1 2 1

输出 1

3
2
2
1

输入 2

5
1 1 1 2
3
4 1 4 1 3
2 2 2
1 5
3
3 1 1

输出 2

3
2
1

说明

让我们分析第一个样例。下图展示了以树的形式表示的山。徒步旅行者被涂上不同的颜色以区分他们的群体。

从左到右的三张图片分别代表所有事件之前、第一次事件之后和第二次事件之后的状态。注意在最后一张图片中,两个不同的群体(图片中为蓝色和绿色)在节点 4 相遇了。在此之后,他们将作为一个单一的群体行进,因此不同群体的数量减少了 1,该事件的答案为 2。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.