SZ#G8M31. 修复道路

提交4 通过1
通过率25%
时间限制2000ms
内存限制512MiB
    ID: 12052 传统题 2000ms 512MiB 尝试: 4 已通过: 1 难度: 普及 上传者: 标签>GESPGESP强化C++c++编程题最小生成树Kruskal连通性维护

题目描述

题目描述

小泽所在的地区共有 nn 座城市,城市编号为 11nn。城市之间原本修建了 mm 条双向道路,但这些道路都因长期失修而暂时无法通行。

ii 条道路连接城市 aia_i 和城市 bib_i。如果要恢复这条道路,需要支付 cic_i 的修复费用。道路修复后,可以在它连接的两座城市之间双向通行,并且可以经过多条已修复道路在城市之间中转。

小泽需要选择若干条道路进行修复,使得任意两座城市之间最终都能够互相到达。在满足连通要求的前提下,他希望支付的总修复费用尽可能少。

请计算最小总费用。如果无论选择哪些道路都不能使全部城市连通,则报告无解。

输入格式

第一行输入两个整数 n,mn,m

接下来 mm 行,第 ii 行输入三个整数 ai,bi,cia_i,b_i,c_i,表示第 ii 条道路连接城市 ai,bia_i,b_i,修复费用为 cic_i

输出格式

如果能够使所有城市连通,输出最小总修复费用;否则输出 IMPOSSIBLE

5 6
1 2 3
2 3 5
2 4 2
3 4 8
5 1 7
5 4 4
14

样例说明 #1

选择费用为 2,3,4,52,3,4,5 的四条道路即可连通五座城市,总费用为 1414,且不存在更便宜的方案。

4 2
1 2 1
3 4 1
IMPOSSIBLE

样例说明 #2

城市 1,21,2 与城市 3,43,4 分属两个无法连接的部分,因此输出 IMPOSSIBLE

2 1
1 2 7
7

样例说明 #3

只有一条道路可选,修复它即可连通两座城市,费用为 77

数据范围与约定

1n1051\le n\le10^51m2×1051\le m\le2\times10^51ai,bin1\le a_i,b_i\le naibia_i\ne b_i1ci1091\le c_i\le10^9。任意两座城市之间至多有一条直接道路。输入中的所有数均为整数。