#BW92. 树的比特数

树的比特数

题目描述

在数字通信与密码学领域,二进制串的传输与解析是基础中的基础。现在,我们需要测试一套新型的数据传输协议。

我们构建了一棵比特树(BitTreeBit Tree),这是一棵普通的二叉树,树上的每一个节点都承载着 1 比特的信息(值为 01)。

在这套协议中,从根节点出发,沿着边一路向下抵达叶子节点的每一条链路,都会被解析为一个完整的二进制编码。其中,根节点代表二进制的最高位,越靠近叶子节点,数位越低。

例如,若一条链路上的数字序列为 1 -> 0 -> 1,则解析出的二进制数为 101,其对应的十进制数值为 55

你的任务是:模拟这套协议的计算核心。你需要遍历整棵比特树,将所有从根节点到叶子节点的路径所代表的二进制数全部累加,计算出它们的总和。题目数据保证,即便在所有路径累加之后,最终的结果依然可以被存储在一个标准的 32 位整数中。

输入格式

第一行输入一个整数 nn (1n10001 \leq n \leq 1000),表示这棵比特树的节点总数。
第二行输入 nn 个整数 v1,v2,,vnv_1, v_2, \dots, v_n,其中 viv_i 表示编号为 ii 的节点承载的比特值(0011)。
接下来的 n1n-1 行,每行包含两个整数 uuvv,表示节点 uu 和节点 vv 之间有一条物理链路相连。

注意:节点编号从 11 开始计数。虽然输入看起来是无向边,但在解析协议时,我们默认节点 11 为整个树的根节点,数据流向是从上至下的。

输出格式

输出一个整数,表示所有根到叶路径所代表的二进制数的总和。

输入输出样例

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

样例解释
这棵比特树的结构及其解析过程如下:

        1
       / \
      0   1
     / \ / \
    0  1 0  1

协议共捕获 4 条有效链路:

  1. 链路 1 → 0 → 0:解析为 100,数值为 44
  2. 链路 1 → 0 → 1:解析为 101,数值为 55
  3. 链路 1 → 1 → 0:解析为 110,数值为 66
  4. 链路 1 → 1 → 1:解析为 111,数值为 77。 校验总和为 4+5+6+7=224 + 5 + 6 + 7 = 22