#1490. 建好的道路-Kruskal

建好的道路-Kruskal

🔗 《先建好的道路与最省钱补全》🧩(并查集预连通块 + Kruskal)

题目背景

兔猫信奥学院,加菲老师修了一部分道路(已经完工、不能拆),小兔和小猫要在此基础上再修一些道路,让所有城市最终互相可达,并且新增花费最少。


题目描述

nn 个城市,已经有 kk 条道路建好(无向、费用视为 0 且必须保留)。 另外有 mm 条可选道路,每条可选道路 (u,v)(u, v) 需要花费 ww

你需要选择若干条可选道路,使得最终所有城市连通,并使新增总花费最小。

若无论如何都无法连通,输出 -1。(本题数据默认保证可连通,你仍需在程序里判断。)


输入格式

第一行三个整数 n,m,kn, m, k

接下来 kk 行,每行两个整数 u,vu, v 表示已建好的一条道路(费用为 0)。

接下来 mm 行,每行三个整数 u,v,wu, v, w 表示一条可选道路及其费用。


输出格式

输出一个整数:最小新增总花费(或 -1)。


数据范围

  • 1n2×1051 \le n \le 2 \times 10^5
  • 0k2×1050 \le k \le 2 \times 10^5
  • 0m3×1050 \le m \le 3 \times 10^5
  • 1w1091 \le w \le 10^9
  • 允许重边
  • 已建道路可能形成环

样例 1

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

样例 1 解释

已建好 121-2。选 343-4(1)和 232-3(5),总新增花费 1+5=61+5=6 最小。


样例 2

5 4 4
1 2
2 3
3 4
4 5
1 3 100
2 4 100
1 5 100
2 5 100
0

样例 2 解释

已建道路已经把所有点连通,因此无需新增,答案为 0。