#loj5384. 「OOI 2022 Day 2」航空改革

    ID: 11064 传统题 2000ms 1024MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>2022OOI贪心Kruskal 重构树生成树NOI/NOI+/CTS

「OOI 2022 Day 2」航空改革

[AdditionalFile5384.zip](file://AdditionalFile5384.zip?type=additional_file)

#5384. 「OOI 2022 Day 2」航空改革

标签: 传统 | 时间限制: 2000 ms | 内存限制: 1024 MiB |

题目描述

题目译自 Open Olympiad in Informatics 2022 Day2 T4 「Авиареформа / Air Reform

伯兰迪亚是一个拥有发达航空系统的庞大国家。全国共有 nn 个城市,历史上由伯兰航空公司提供服务。伯兰航空公司在 mm 对城市之间运营双向航班,第 ii 个航班连接城市 aia_ibib_i,单程票价为 cic_i

已知通过伯兰航空的航班,可以从任意城市到达任意其他城市(可能需要中转),并且任何由多个中转航班组成的路线的成本等于其中最贵的航班的成本。更正式地说,从城市 t1t_1 到城市 tkt_k 的路线,若有 (k2)(k-2) 次中转经过城市 t2,t3,t4,,tk1t_2, t_3, t_4, \ldots, t_{k-1},则该路线的成本为从 t1t_1t2t_2t2t_2t3t_3t3t_3t4t_4 等直到 tk1t_{k-1}tkt_k 的所有航班成本的最大值。当然,所有这些航班必须由伯兰航空运营。

最近,伯兰迪亚新成立了一家航空公司 S8 航空。该公司在所有没有伯兰航空航班的城市对之间运营双向航班。因此,每对城市之间要么有伯兰航空的航班,要么有 S8 航空的航班。

S8 航空的航班价格计算如下:对于每对运营 S8 航空航班的城市 xxyy,该航班的成本等于伯兰航空从 xxyy 的最低路线成本(按照上述成本计算规则)。

已知通过 S8 航空的航班,可以从任意城市到达任意其他城市(可能需要中转),并且与伯兰航空类似,S8 航空的多段中转路线的成本等于其中最贵的航班的成本。

由于与 S8 航空的竞争加剧,伯兰航空决定进行航空改革,调整其航班价格。具体来说,对于连接城市 aia_ibib_i 的第 ii 个航班,伯兰航空希望将其价格调整为 S8 航空从 aia_ibib_i 的最低路线成本。请帮助伯兰航空的经理计算新的航班价格。

输入格式

每个测试点包含多组输入数据。第一行包含两个整数 ttgg (1t10000,0g8)(1 \leq t \leq 10000, 0 \leq g \leq 8),分别表示输入数据的组数和子任务编号。接下来是各组数据的描述。

每组数据的第一行包含两个整数 nnmm $(4 \leq n \leq 200000, n-1 \leq m \leq 200000, m \leq \frac{(n-1)(n-2)}{2})$,分别表示伯兰迪亚的城市数量和伯兰航空的航班数量。

接下来的 mm 行描述伯兰航空的航班,第 ii 行包含三个整数 ai,bi,cia_i, b_i, c_i (1ai,bin,1ci109)(1 \leq a_i, b_i \leq n, 1 \leq c_i \leq 10^{9}),表示第 ii 个航班连接的城市编号和该航班的成本。

保证没有航班连接同一城市自身,也没有两条航班连接同一对城市。保证通过伯兰航空的航班可以从任意城市到达任意其他城市,并且通过 S8 航空的航班也可以从任意城市到达任意其他城市。

NN 表示所有数据组中 nn 的总和,MM 表示所有数据组中 mm 的总和。保证 N,M200000N, M \leq 200000

输出格式

对于每组输入数据,在单独的一行中输出 mm 个整数,其中第 ii 个整数表示航空改革后第 ii 个伯兰航空航班的成本。

样例

输入

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

输出

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

在第一组输入数据中,S8 航空将在以下城市对之间运营航班:(1,3)(1, 3)(1,4)(1, 4)(2,4)(2, 4)

  • 城市 1133 之间航班的成本为 22,因为伯兰航空的最低路线成本为 22——路线包括城市 1122 的航班(成本 11)和城市 2233 的航班(成本 22),最大值为 22
  • 城市 1144 之间航班的成本为 33,因为伯兰航空的最低路线成本为 33——路线包括城市 1122 的航班(成本 11)、城市 2233 的航班(成本 22)和城市 3344 的航班(成本 33),最大值为 33
  • 城市 2244 之间航班的成本为 33,因为伯兰航空的最低路线成本为 33——路线包括城市 2233 的航班(成本 22)和城市 3344 的航班(成本 33),最大值为 33

航空改革后:

  • 伯兰航空城市 1122 之间航班的成本将为 33,因为 S8 航空的最低路线成本为 33——路线包括城市 1144 的航班(成本 33)和城市 2244 的航班(成本 33),最大值为 33
  • 伯兰航空城市 2233 之间航班的成本将为 33,因为 S8 航空的最低路线成本为 33——路线包括城市 2244 的航班(成本 33)、城市 1144 的航班(成本 33)和城市 1133 的航班(成本 22),最大值为 33
  • 伯兰航空城市 3344 之间航班的成本将为 33,因为 S8 航空的最低路线成本为 33——路线包括城市 1133 的航班(成本 22)和城市 1144 的航班(成本 33),最大值为 33

在第二组输入数据中,S8 航空将运营以下航班:城市 1144 之间(成本 11)、城市 2233 之间(成本 11)、城市 2255 之间(成本 22)、城市 3344 之间(成本 11)、城市 3355 之间(成本 22)。

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 附加限制 子任务依赖 备注
11 1111 n10n \leq 10N10000N \leq 10000 00
22 1010 n100n \leq 100N10000N \leq 10000 0,10, 1
33 1111 n1000n \leq 1000N10000N \leq 10000ci2c_i \leq 2
44 1212 n1000n \leq 1000N10000N \leq 10000 0,1,20, 1, 2
55 1212 每组输入数据中 m=n1m = n - 1
66 1717 ci2c_i \leq 2 33
77 1010 ci10c_i \leq 10 3,63, 6
88 1717 070 \sim 7