P7130 「RdOI R1」平衡常数(balance)
题目描述
给定一棵以 $1$ 为根的点带权有根树 $G=(V,E)$,第 $i$ 个节点的权值记为
$w_i$,以 $i$ 为根的子树的点集记为 $V_i$,求一个点集 $V'\subseteq V$,满足以下条件:
- $\forall i$,都有 $|V_i \cap V'| \le \lfloor \frac{|V_i|}{2} \rfloor$
- 最大化 $\sum _{i \in V'} w_i$
输出 $\sum _{i\in V'} w_i$ 即可,也就是选取的点的权值和。
输入格式
第一行为一个正整数 $n$。
第二行为 $n$ 个正整数 $w_i$。
接下来 $n-1$ 行每行为两个整数 $u,v$,表示第 $i$ 条边的两个端点。
输出格式
输出只有一行,为你所求得的最大总和。
说明/提示
【数据范围】
| 测试点编号 | $n\leq$ | $w_i\leq$ | 特殊性质 |
| - | - | - | - |
| $1\sim2$ | $10$ | $10^3$ | |
| $3\sim 5$ | $2 \times 10^3$ | $10^3$ | |
| $6\sim12$ | $10^5$ | $10^3$ | |
| $13\sim16$ | $5 \times 10^5$ | $10^9$ | $v=u+1$ |
| $17\sim25$ | $5 \times 10^5$ | $10^9$ | |
对于 $100\%$ 的数据,$1 \leq n \leq 5 \times 10^5$,$0 < w_i \leq 10^9$,$1 \leq u,v \leq n$。
---
【说明/提示】
- Idea From : LCuter
---
【文件读入读出】**(模拟,提交代码时不需使用)**
- 文件名:`balance.cpp`
- 读入文件名:`balance.in`
- 读出文件名:`balance.out`