CF2035F.Tree Operations

省选/NOI-

通过率:0%

AC君温馨提醒

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

题目描述

这确实反映了我们的社会。

有一天,一只乌龟给了你一棵树,共 nn 个节点,其中节点 xx 是根节点。每个节点有一个初始非负值:第 ii 个节点的起始值为 aia_i 。

要使所有节点的值都等于 00 。为此,您将在树上执行一系列操作,其中每个操作将在某个节点上执行。定义节点 uu 上的操作,在 uu 的子树 ∗^{\text{∗}} 中选择一个节点,并将其值递增或递减 11 。在节点上执行操作的顺序如下:

  • 对于 1≤i≤n1 \le i \le n , 第 ii 次操作将在节点 ii 上执行。
  • 对于 i>ni > n ,第 ii 次操作将与操作 i−ni - n 在同一节点上执行。

更正式地说,第 ii 次操作将在第 (((i−1) mod n)+1)(((i - 1) \bmod n) + 1) 次节点上执行。 †^{\text{†}}

注意,不能跳过操作;也就是说,如果不先执行 1,2,…,i−11, 2, \ldots, i - 1 操作,就不能执行 ii 第1次操作。

假设您选择了最优的操作,找到在使所有节点的值等于 00 之前必须执行的最小操作数。如果经过有限次运算,不可能使所有节点的值都等于 00 ,则输出 −1-1 。

∗^{\text{∗}} 节点 uu 的子树是 uu 位于从该节点到根节点的最短路径上的节点集合,包括 uu 本身。

†^{\text{†}} 这里, a mod ba \bmod b 表示 aa 除以 bb 的余数。

输入格式

第一行包含单个整数 tt ( 1≤t≤1001\le t\le 100 )—测试用例的数量。

每个测试用例的第一行包含两个整数 nn 和 xx ( 1≤n≤20001 \le n \le 2000 , 1≤x≤n1 \le x \le n )—节点数和树的根。

每个测试用例的第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n ( 0≤ai≤1090 \le a_i \le 10^9 )——每个节点的起始值。

每个测试用例的下一行 n−1n - 1 包含两个整数 uu 和 vv ( 1≤u,v≤n1 \le u, v \le n , u≠vu \neq v ),表示从 uu 到 vv 的无向边。它保证给定的边构成一棵树。

保证所有测试用例 nn 的和不超过 20002000 。

输出格式

对于每个测试用例,输出一个整数,表示生成所有节点 00 所需的最小操作量。如果不可能使所有节点都为 00 ,则输出 −1-1 。

输入输出样例

  • 输入#1

    5
    2 1
    1 2
    1 2
    3 2
    2 1 3
    2 1
    3 2
    4 1
    1 1 0 1
    1 2
    2 3
    1 4
    12 6
    14 4 5 6 12 9 5 11 6 2 1 12
    3 9
    10 6
    6 12
    4 3
    3 1
    5 11
    9 7
    5 6
    1 8
    2 8
    5 1
    1 1
    0

    输出#1

    3
    6
    5
    145
    0

说明/提示

在第一个测试用例中,您可以执行以下有效的操作顺序:

  • 对于操作 11,减少节点 11 的值。这是有效的,因为 (((1−1) mod n)+1)=1(((1 - 1) \bmod n) + 1) = 1 ,节点 11 在节点 11 的子树中。
  • 对于操作 22 ,减少节点 22 的值。这是有效的,因为 (((2−1) mod n)+1)=2(((2 - 1) \bmod n) + 1) = 2 ,节点 22 在节点 22 的子树中。
  • 对于操作 33 ,减少节点 22 的值。这是有效的,因为 (((3−1) mod n)+1)=1(((3 - 1) \bmod n) + 1) = 1 ,节点 22 在节点 11 的子树中。

翻译者 wjbbssb250;WangBX 修缮一些细节。

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

首页