QOJ.ac

QOJ

Limite de temps : 3.0 s Limite de mémoire : 1024 MB Points totaux : 100 Hackable ✓

#17824. 查询丛林

Statistiques

Oner 是一名打野(jungler)——这是一个在野区猎杀怪物的角色。鉴于他在野区看到的树木数量,他沉迷于树上查询问题也就不足为奇了。

给你一棵含有 $n$ 个节点的树,以节点 1 为根。每个节点要么包含一只怪物,要么不包含。

你想找到最小的整数 $k$,使得存在 $k$ 条路径满足以下条件:

  • 每条路径必须从根节点(节点 1)开始。
  • 每个包含怪物的节点必须被包含在至少一条路径中。如果一个节点是路径上的节点之一(包括其端点),则认为它被包含在该路径中。

为了使这个问题更具挑战性,你还需要回答 $q$ 次询问。对于每次询问,给你一个节点 $v$。对于 $v$ 的子树中的每个节点 $w$,其状态都会被翻转——包含怪物的节点变为不包含,不包含怪物的节点变为包含。在每次询问后,你必须在更新后的状态下再次解决原问题。

请注意,询问是累加的,因此每次询问的影响会持续到后续的询问中。

输入格式

每个测试点包含多个测试用例。第一行包含测试用例的数量 $t$ ($1 \le t \le 20\,000$)。接下来是测试用例的描述。

第一行包含一个整数 $n$ ($2 \le n \le 250\,000$) —— 树中的节点数。

下一行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$ ($a_i \in \{0, 1\}$),表示初始状态。如果 $a_i = 1$,则节点 $i$ 包含一只怪物;如果 $a_i = 0$,则不包含。

接下来的 $n - 1$ 行每行包含两个整数 $u$ 和 $v$ ($1 \le u, v \le n, u \neq v$),描述节点 $u$ 和 $v$ 之间的一条边。保证这些边构成一棵树。

下一行包含一个整数 $q$ ($0 \le q \le 250\,000$) —— 询问的数量。

接下来的 $q$ 行每行包含一个整数 $v_i$ ($1 \le v_i \le n$) —— 第 $i$ 次询问给出的节点。

保证所有测试用例中 $n$ 的总和不超过 $250\,000$。

保证所有测试用例中 $q$ 的总和不超过 $250\,000$。

输出格式

输出 $q + 1$ 行。第一行应包含初始状态下的最小路径数 $k$。接下来的每行应包含每次询问后的答案。

样例

输入样例 1

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

输出样例 1

2
1
1
2
3
1
0
1

说明

测试用例 1:

初始状态:怪物在节点 $\{2, 4, 5\}$。我们需要两条路径:$1 \to 7 \to 3 \to 2$ 和 $1 \to 7 \to 5 \to 4$。答案为 2。

在第 1 次询问 ($v = 2$) 后:怪物在节点 $\{4, 5\}$。我们只需要一条路径:$1 \to 7 \to 5 \to 4$。答案为 1。

在第 2 次询问 ($v = 4$) 后:怪物在节点 $\{5\}$。我们只需要一条路径:$1 \to 7 \to 5$。答案为 1。

在第 3 次询问 ($v = 6$) 后:怪物在节点 $\{5, 6\}$。我们需要两条路径:$1 \to 7 \to 5$ 和 $1 \to 6$。答案为 2。

在第 4 次询问 ($v = 7$) 后:怪物在节点 $\{2, 3, 4, 6, 7\}$。我们需要三条路径:$1 \to 6$、$1 \to 7 \to 5 \to 4$ 和 $1 \to 7 \to 3 \to 2$。答案为 3。

下图表示样例输入中的树。

样例输入中的树

测试用例 2:

初始状态:怪物在节点 $\{2\}$。我们需要一条路径:$1 \to 2$。答案为 1。

在第 1 次询问 ($v = 2$) 后:没有怪物。我们需要 0 条路径。答案为 0。

在第 2 次询问 ($v = 1$) 后:怪物在节点 $\{1, 2\}$。我们需要一条路径:$1 \to 2$。答案为 1。

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.