#P14872. [OOI2024 资格赛]Paired roads成对道路

[OOI2024 资格赛]Paired roads成对道路

题目描述

某个国家有 nn 座城市,目前还没有建任何道路。第 ii 座城市有 wiw_i 人口。还有 n1n-1 条候选道路可以修建。第 ii 条道路如果被修建,将连接城市 uiu_iviv_i,修建费用为 sis_i

如果把所有候选道路都修建起来,那么任意城市之间都可以互相到达。也就是说,这些候选道路构成一棵树。

接下来的 kk 天中,每天会发生如下事件:在第 ii 天,选择一座城市 cic_i,并选择两条尚未修建且都连接 cic_i 与其他城市的不同道路。然后修建这两条道路,并支付费用,费用等于这两条道路修建费用之和。城市 cic_i 会被认为是第 ii 天的中心城市。

kk 天后,每个至少作为中心城市出现过一次的城市会产生收益,收益等于该城市的人口数量。

定义收益值 benefit 为:

中心城市产生的总收益已修建道路的总费用.\text{中心城市产生的总收益}-\text{已修建道路的总费用}.

请你求出最大可能的收益值。

输入格式

第一行包含三个整数 n,k,tn,k,t3n2000003 \le n \le 2000001kn121 \le k \le \frac{n-1}{2}0t10 \le t \le 1),分别表示城市数、要修建的道路对数,以及是否需要输出具体方案。若 t=1t=1,则需要输出修建方案;若 t=0t=0,则只需要输出最大收益值。

第二行包含 nn 个整数 w1,w2,,wnw_1,w_2,\dots,w_n1wi1081 \le w_i \le 10^8),表示每座城市的人口。

接下来 n1n-1 行,每行包含三个整数 ui,vi,siu_i,v_i,s_i1ui,vin1 \le u_i,v_i \le n1si1081 \le s_i \le 10^8),表示第 ii 条候选道路连接的两座城市和修建费用。

保证候选道路构成一棵树,并且存在满足条件的方式修建 kk 对道路。

输出格式

第一行输出一个整数,表示修建恰好 kk 对道路后可以得到的最大收益值。

如果 t=1t=1,接下来输出 kk 行,每行包含三个整数 ci,xi,yic_i,x_i,y_i1ci,xi,yin1 \le c_i,x_i,y_i \le n),表示第 ii 天修建道路 (ci,xi)(c_i,x_i)(ci,yi)(c_i,y_i),中心城市为 cic_i

如果存在多种最优方案,输出任意一种。

样例 #1

样例输入 #1

6 2 1
1 2 3 4 5 6
1 2 1
2 3 5
2 4 3
1 5 2
5 6 4

样例输出 #1

-3
5 6 1
2 4 1

样例 #2

样例输入 #2

8 3 0
4 5 1 2 3 1 3 5
2 1 15
7 1 5
4 8 1
8 5 2
7 8 1
6 7 5
3 7 7

样例输出 #2

-13

样例解释

第一个样例中,最优方案中修建的道路如下,同一对道路在原题图中用相同颜色标记:

第一个样例的最优建路方案。

修建道路的总费用为 2+4+1+3=102+4+1+3=10。修建完成后,城市 2255 产生收益,分别为 2255。因此收益值为:

2+510=3.2+5-10=-3.

可以证明无法得到更好的答案。

第二个样例中,最优方案如下:

第二个样例的最优建路方案。

修建道路的总费用为 5+1+2+1+5+7=215+1+2+1+5+7=21。修建完成后,城市 7788 产生收益,分别为 3355。因此收益值为:

3+521=13.3+5-21=-13.

可以证明无法得到更好的答案。

评分方式

测试数据包含 7 个测试组。只有通过该组以及若干指定的前置测试组,才能获得该组分数。Offline-testing 表示该组结果只会在比赛结束后公布。

组别 分数 附加限制 nn 附加限制 tt 依赖组 备注
0 - - 样例
1 13 n200n \le 200 t=0t=0 -
2 17 n2000n \le 2000 1
3 12 - 0-2
4 19 - t=0t=0 - ui=i,vi=i+1u_i=i, v_i=i+1
5 11 - 4
6 15 t=0t=0 1,2,4 Offline-testing
7 13 - 0-6