loj#P3531. 「APIO 2021」封闭道路

「APIO 2021」封闭道路

题面描述

在泗水市,有 NN 个路口(编号从 00N1N-1)。这些路口由 N1N-1 条双向道路连接(编号从 00N2N- 2),因此通过这些道路,任意一对路口之间都有一条唯一的路径。ii 号道路(0iN20 \le i \le N-2)连接着 U[i]U[i] 号和 V[i]V[i] 号路口。

为了提高环保意识,泗水市长 Pak Dengklek 计划举办无车日。为了鼓励该活动,Pak Dengklek 将组织封路。Pak Dengklek 将首先选择一个非负整数 kk,然后封闭一些道路,以使每个路口只能直接连接至多 kk 条未封闭的道路。封闭 ii 号道路的成本为 W[i]W[i]

请你帮助 Pak Dengklek 对每个可能的非负整数 k (0kN1)k\ (0\le k \le N - 1) 计算封闭道路的最低总成本。

实现细节

你需要实现下列函数:

int64[] minimum_closure_costs(int N, int[] U, int[] V, int[] W)
  • NN:泗水市的路口数量。
  • UUVV:大小为 N1N - 1 的数组,其中 U[i]U[i] 号路口和 V[i]V[i] 号路口通过 ii 号道路直接连接。
  • WW:大小为 N1N-1 的数组,其中封闭 ii 号道路的成本为 W[i]W[i]
  • 该函数需要返回一个大小为 NN 的数组。对每个 k (0kN1)k\ (0 \le k\le N - 1)kk 号元素是使得每个路口与至多 kk 条未封闭道路直接连接的最低总成本。
  • 该函数将被调用恰好一次。
5
0 1 1
0 2 4
0 3 3
2 4 2
10 5 1 0 0
4
0 1 5
2 0 10
0 3 5
20 10 5 0

约束

  • 2N1000002 \le N \le 100\,000
  • 0U[i],V[i]N10 \le U[i], V[i] \le N - 1 (for all 0iN20 \le i \le N - 2)
  • 任意一对路口可以通过道路相互到达。
  • 1W[i]1091 \le W[i] \le 10^9 (for all 0iN20 \le i \le N - 2)

子任务

  1. (5 分) U[i]=0U[i] = 0 (for all 0iN20 \le i \le N - 2)
  2. (7 分) U[i]=iU[i] = i, V[i]=i+1V[i] = i + 1 (for all 0iN20 \le i \le N - 2)
  3. (14 分) N200N \le 200
  4. (10 分) N2000N \le 2000
  5. (17 分) W[i]=1W[i] = 1 (for all 0iN20 \le i \le N - 2)
  6. (25 分) W[i]10W[i] \le 10 (for all 0iN20 \le i \le N - 2)
  7. (22 分) 无附加限制

示例测试程序

示例测试程序按如下格式读取输入数据:

  • 11 行: NN
  • 2+i2 + i (0iN20 \le i \le N - 2) 行: U[i]  V[i]  W[i]U[i] \; V[i] \; W[i]

示例测试程序输出仅一行,包含一个数组,表示 minimum_closure_costs 的返回值.