CF1882D.Tree XOR
普及+/提高
通过率:0%
时间限制:3.00s
内存限制:512MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You are given a tree with n vertices labeled from 1 to n. An integer ai is written on vertex i for i=1,2,…,n. You want to make all ai equal by performing some (possibly, zero) spells.
Suppose you root the tree at some vertex. On each spell, you can select any vertex v and any non-negative integer c. Then for all vertices i in the subtree† of v, replace ai with ai⊕c. The cost of this spell is s⋅c, where s is the number of vertices in the subtree. Here ⊕ denotes the bitwise XOR operation.
Let mr be the minimum possible total cost required to make all ai equal, if vertex r is chosen as the root of the tree. Find m1,m2,…,mn.
† Suppose vertex r is chosen as the root of the tree. Then vertex i belongs to the subtree of v if the simple path from i to r contains v.
给你一棵有 n 个顶点的树,顶点编号为 1 到 n。对每个 i=1,2,…,n,顶点 i 上写有一个整数 ai。你可以执行若干次(可能为零次)法术,使得所有 ai 的值相等。
假设你将树以某个顶点为根进行定根。每次法术中,你可以任选一个顶点 v 和一个非负整数 c;然后对 v 的子树† 中的所有顶点 i,将 ai 替换为 ai⊕c。该次法术的代价为 s⋅c,其中 s 是该子树中顶点的个数。此处 ⊕ 表示按位异或运算。
令 mr 表示当以顶点 r 为树根时,使所有 ai 相等所需的最小总代价。请计算 m1,m2,…,mn。
† 假设选定顶点 r 作为树根,则顶点 i 属于顶点 v 的子树,当且仅当从 i 到 r 的简单路径经过 v。
输入格式
Each test contains multiple test cases. The first line contains the number of test cases t (1≤t≤104). The description of the test cases follows.
The first line of each test case contains a single integer n (1≤n≤2⋅105).
The second line of each test case contains n integers a1,a2,…,an (0≤ai<220).
Each of the next n−1 lines contains two integers u and v (1≤u,v≤n), denoting that there is an edge connecting two vertices u and v.
It is guaranteed that the given edges form a tree.
It is guaranteed that the sum of n over all test cases does not exceed 2⋅105.
每个测试包含多个测试用例。第一行包含测试用例的数量 t(1≤t≤104)。随后是各测试用例的描述。
每个测试用例的第一行包含一个整数 n(1≤n≤2⋅105)。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an(0≤ai<220)。
接下来的 n−1 行中,每行包含两个整数 u 和 v(1≤u,v≤n),表示顶点 u 和 v 之间存在一条边。
保证所给的边构成一棵树。
保证所有测试用例的 n 值之和不超过 2⋅105。
输出格式
For each test case, print m1,m2,…,mn on a new line.
对于每个测试用例,在新的一行上输出 m1,m2,…,mn。
输入输出样例
输入#1
2 4 3 2 1 0 1 2 2 3 2 4 1 100
输出#1
8 6 12 10 0
说明/提示
In the first test case, to find m1 we root the tree at vertex 1.
- In the first spell, choose v=2 and c=1. After performing the spell, a will become [3,3,0,1]. The cost of this spell is 3.
- In the second spell, choose v=3 and c=3. After performing the spell, a will become [3,3,3,1]. The cost of this spell is 3.
- In the third spell, choose v=4 and c=2. After performing the spell, a will become [3,3,3,3]. The cost of this spell is 2.
Now all the values in array a are equal, and the total cost is 3+3+2=8.
The values m2, m3, m4 can be found analogously.
In the second test case, the goal is already achieved because there is only one vertex.
在第一个测试用例中,为求出 m1,我们将树以顶点 1 为根。
- 在第一次施法中,选择 v=2 和 c=1。施法后,数组 a 变为 [3,3,0,1]。此次施法的代价为 3。
- 在第二次施法中,选择 v=3 和 c=3。施法后,数组 a 变为 [3,3,3,1]。此次施法的代价为 3。
- 在第三次施法中,选择 v=4 和 c=2。施法后,数组 a 变为 [3,3,3,3]。此次施法的代价为 2。
此时,数组 a 中所有值均已相等,总代价为 3+3+2=8。
类似地可求出 m2、m3、m4。
在第二个测试用例中,目标已自然达成,因为图中仅有一个顶点。
输入解题思路,AI测评打分。不知道怎么写?