#P7130. 「RdOI R1」平衡常数(balance)

「RdOI R1」平衡常数(balance)

题目描述

给定一棵以 11 为根的点带权有根树 G=(V,E)G=(V,E),第 ii 个节点的权值记为 wiw_i,以 ii 为根的子树的点集记为 ViV_i,求一个点集 VVV'\subseteq V,满足以下条件:

  • i\forall i,都有 ViVVi2|V_i \cap V'| \le \lfloor \frac{|V_i|}{2} \rfloor

  • 最大化 iVwi\sum _{i \in V'} w_i

输出 iVwi\sum _{i\in V'} w_i 即可,也就是选取的点的权值和。

输入格式

第一行为一个正整数 nn

第二行为 nn 个正整数 wiw_i

接下来 n1n-1 行每行为两个整数 u,vu,v,表示第 ii 条边的两个端点。

输出格式

输出只有一行,为你所求得的最大总和。

3
1 2 3
1 2
1 3
1

提示

【数据范围】

测试点编号 nn\leq wiw_i\leq 特殊性质
121\sim2 1010 10310^3
353\sim 5 2×1032 \times 10^3
6126\sim12 10510^5
131613\sim16 5×1055 \times 10^5 10910^9 v=u+1v=u+1
172517\sim25

对于 100%100\% 的数据,1n5×1051 \leq n \leq 5 \times 10^50<wi1090 < w_i \leq 10^91u,vn1 \leq u,v \leq n


【说明/提示】

  • Idea From : LCuter

【文件读入读出】(模拟,提交代码时不需使用)

  • 文件名:balance.cpp
  • 读入文件名:balance.in
  • 读出文件名:balance.out