CF2035F.Tree Operations
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这确实反映了我们的社会。
有一天,一只乌龟给了你一棵树,共 n 个节点,其中节点 x 是根节点。每个节点有一个初始非负值:第 i 个节点的起始值为 ai 。
要使所有节点的值都等于 0 。为此,您将在树上执行一系列操作,其中每个操作将在某个节点上执行。定义节点 u 上的操作,在 u 的子树 ∗ 中选择一个节点,并将其值递增或递减 1 。在节点上执行操作的顺序如下:
- 对于 1≤i≤n , 第 i 次操作将在节点 i 上执行。
- 对于 i>n ,第 i 次操作将与操作 i−n 在同一节点上执行。
更正式地说,第 i 次操作将在第 (((i−1)modn)+1) 次节点上执行。 †
注意,不能跳过操作;也就是说,如果不先执行 1,2,…,i−1 操作,就不能执行 i 第1次操作。
假设您选择了最优的操作,找到在使所有节点的值等于 0 之前必须执行的最小操作数。如果经过有限次运算,不可能使所有节点的值都等于 0 ,则输出 −1 。
∗ 节点 u 的子树是 u 位于从该节点到根节点的最短路径上的节点集合,包括 u 本身。
† 这里, amodb 表示 a 除以 b 的余数。
输入格式
第一行包含单个整数 t ( 1≤t≤100 )—测试用例的数量。
每个测试用例的第一行包含两个整数 n 和 x ( 1≤n≤2000 , 1≤x≤n )—节点数和树的根。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an ( 0≤ai≤109 )——每个节点的起始值。
每个测试用例的下一行 n−1 包含两个整数 u 和 v ( 1≤u,v≤n , u=v ),表示从 u 到 v 的无向边。它保证给定的边构成一棵树。
保证所有测试用例 n 的和不超过 2000 。
输出格式
对于每个测试用例,输出一个整数,表示生成所有节点 0 所需的最小操作量。如果不可能使所有节点都为 0 ,则输出 −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
说明/提示
在第一个测试用例中,您可以执行以下有效的操作顺序:
- 对于操作 1,减少节点 1 的值。这是有效的,因为 (((1−1)modn)+1)=1 ,节点 1 在节点 1 的子树中。
- 对于操作 2 ,减少节点 2 的值。这是有效的,因为 (((2−1)modn)+1)=2 ,节点 2 在节点 2 的子树中。
- 对于操作 3 ,减少节点 2 的值。这是有效的,因为 (((3−1)modn)+1)=1 ,节点 2 在节点 1 的子树中。
翻译者 wjbbssb250;WangBX 修缮一些细节。
输入解题思路,AI测评打分。不知道怎么写?