CF2152G.Query Jungle

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Oner 是一名打野选手——他的职责是在“丛林”中狩猎怪物。鉴于他在丛林中看到的树的数量,他对树上查询类问题情有独钟。

给定一棵 nn 个结点的树,树以 11 号结点为根。每个结点可能包含怪物,也可能不包含怪物。

你需要找到最小的整数 kk,使得存在 kk 条路径,满足以下条件:

  • 每条路径必须从根(顶点 11)开始。
  • 树上每个包含怪物的结点,必须在至少一条路径中出现。一个结点若在路径的任一端点或路径上的任何一个点上都算被“包含”。

为了增添难度,你还要回答 qq 个查询。每个查询给定一个顶点 vv,对于 vv 的子树内的每个结点,其状态会“反转”:原本有怪物的变为没有怪物,原本没有怪物的变为有怪物。每次查询后,你需要再次解决原问题,即输出更新后树的最小路径数。

注意查询具有累积性,所以每次查询的影响会影响之后所有的查询。

输入格式

每份测试数据包含多组测试用例。第一行为整数 tt(1≤t≤20 0001 \le t \le 20\,000),表示用例数。以下为每组测试用例的描述。

第一行包含一个整数 nn(2≤n≤250 0002 \le n \le 250\,000),表示树的结点数量。

接下来的 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(ai∈{0,1}a_i \in \{0, 1\}):如果 ai=1a_i = 1,则 ii 号顶点有怪物;否则没有怪物。

接下来 n−1n-1 行,每行两个整数 uu 和 vv(1≤u,v≤n,u≠v1 \le u, v \le n, u \ne v),表示树中的一条边。保证这些边构成一棵树。

之后一行包含一个整数 qq(0≤q≤250 0000 \le q \le 250\,000)——查询数。

接下来的 qq 行,每行一个整数 viv_i(1≤vi≤n1 \le v_i \le n),表示第 ii 次查询的位置。

保证所有测试用例的 nn 之和不超过 250 000250\,000,所有 qq 之和也不超过 250 000250\,000。

输出格式

输出 q+1q+1 行。第一行为初始状态下所需最小路径数 kk。之后每行输出每次查询后的答案。

输入输出样例

  • 输入#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}\{2, 4, 5\}。我们需要两条路径:1→7→3→21 \to 7 \to 3 \to 2 和 1→7→5→41 \to 7 \to 5 \to 4。答案为 22。

第一次查询后(v=2v=2):怪物在顶点 {4,5}\{4, 5\}。仅需一条路径 1→7→5→41 \to 7 \to 5 \to 4。答案为 11。

第二次查询后(v=4v=4):怪物在顶点 {5}\{5\}。仅需一条路径 1→7→51 \to 7 \to 5。答案为 11。

第三次查询后(v=6v=6):怪物在顶点 {5,6}\{5, 6\}。需要两条路径:1→7→51 \to 7 \to 5 和 1→61 \to 6。答案为 22。

第四次查询后(v=7v=7):怪物在顶点 {2,3,4,6,7}\{2, 3, 4, 6, 7\}。需要三条路径:1→61 \to 6,1→7→5→41 \to 7 \to 5 \to 4,和 1→7→3→21 \to 7 \to 3 \to 2。答案为 33。

下图是该样例所对应的树结构:

测试用例 2:

初始状态:怪物在顶点 {2}\{2\}。仅需一条路径 1→21 \to 2。答案为 11。

第一次查询后(v=2v=2):没有怪物。需要 00 条路径。答案为 00。

第二次查询后(v=1v=1):怪物在顶点 {1,2}\{1,2\}。仅需一条路径 1→21 \to 2。答案为 11。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页