CF2258F Plus Minus Tree

题目描述

给定一棵有 $n$ 个节点的树 $T$,以节点 $1$ 为根。每个节点 $v$ 被赋予初始权值 $a_v \in \{ -1, 0, +1 \}$。 对于每一个权值为 $0$ 的节点,你需要为其重新分配一个权值,选择 $-1$ 或 $+1$。记 $x_v$ 为节点 $v$ 的最终权值。 对于每个节点 $v$,设 $T_v$ 为以 $v$ 为根的子树的所有节点集合。节点 $v$ 的代价定义为 $$ S_v = \left| \sum_{u \in T_v}{x_u} \right|. $$ 整棵树的总代价定义为所有节点的代价之和。请在你为所有初始权值为 $0$ 的节点分配权值之后,求出树的最小总代价是多少。 *注:* - 树是一种无环连通图。根树是指定一个节点为根节点的树。 - 节点 $v$ 的子树为包含 $v$、其所有后代节点以及这些节点间所有边的子图。节点 $u$ 是节点 $v$ 的后代,若 $v$ 是 $u$ 的祖先。节点不是自己的后代。$v$ 的祖先为从 $v$ 到根节点(包含根节点但不包含 $v$)路径上的所有节点。根节点没有祖先。

输入格式

每组测试数据包含多个测试用例。第一行为测试用例数 $t$($1 \le t \le 10^4$)。每组测试用例格式如下: 第一行为一个整数 $n$($2 \le n \le 2 \times 10^5$),表示树的节点数。 第二行为 $n$ 个整数 $a_1, a_2, \ldots, a_n$($-1 \le a_i \le 1$)。 接下来 $n-1$ 行,每行两个整数 $u$ 和 $v$($1 \le u, v \le n$),表示树的一条边,连接 $u$ 和 $v$。 保证输入的边构成一棵树。 保证所有测试用例 $n$ 之和不超过 $2 \times 10^5$。

输出格式

对于每组测试用例,输出一行,表示最小总代价。

说明/提示

对于第一个测试用例,最佳赋值为 $[+1, +1, -1, -1, +1]$ 和 $[-1, +1, -1, -1, +1]$,其总代价为 $5$。 另一种赋值 $[+1, +1, -1, +1, +1]$ 的总代价为 $9$,$[-1, +1, -1, +1, +1]$ 的总代价为 $7$。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2258F/99db13fdd7e68d0c13fe98136cd1c171bba6a3530be6c500ec6a2f839c2a70d5.png) ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2258F/a078556be9f0aa43f4f750b20d6b1725b582f64d13f30c27430a096c5bab995d.png) 第一个测试用例的树形结构 第二个测试用例的树形结构 由 ChatGPT 5 翻译