P30190 [CSP-S 2025] 道路修复
提高
题目描述

C 国的交通系统由 $n$ 座城市与 $m$ 条连接两座城市的双向道路构成,第 $i$ 条道路连接城市 $u_i$ 和 $v_i$。任意两座城市都能通过若干条道路相互到达。

然而,近期由于一场大地震,所有 $m$ 条道路都被破坏了,修复第 $i$ 条道路的费用为 $w_i$。与此同时,C 国还有 $k$ 个准备进行城市化改造的乡镇。对第 $j$ 个乡镇进行城市化改造的费用为 $c_j$;改造完成后,可以在它与原来的 $n$ 座城市间建造道路,与第 $i$ 座城市间建造一条道路的费用为 $a_{j,i}$。C 国可以选择任意多个乡镇进行改造,也可以一个都不选。

为尽快恢复交通,C 国政府希望以最低费用将原有的 $n$ 座城市两两连通。你需要帮助他们求出最小费用。

注:原评测使用文件输入输出(road.in / road.out),本站提交请使用标准输入输出,程序中不要写文件重定向代码。原题提交文件名:road.cpp,编译选项 -O2 -std=c++14 -static。

输入格式

输入的第一行包含三个非负整数 $n, m, k$,分别表示原有的城市数量、道路数量和准备进行城市化改造的乡镇数量。

第 $i+1$($1 \le i \le m$)行包含三个非负整数 $u_i, v_i, w_i$,表示第 $i$ 条道路连接的两座城市与修复费用。

第 $j+m+1$($1 \le j \le k$)行包含 $n+1$ 个非负整数 $c_j, a_{j,1}, \dots, a_{j,n}$,分别表示改造第 $j$ 个乡镇的费用与在该乡镇与原有各城市间建造道路的费用。

输出格式

输出一行一个非负整数,表示将原有的 $n$ 座城市两两连通的最小费用。

样例输入
4 4 2 1 4 6 2 3 7 4 2 5 4 3 4 1 1 8 2 4 100 1 3 2 4
样例输出
13
提示

【样例 1 解释】

修复第 3、4 条道路,改造第 1 个乡镇并建造它与第 1、3 座城市间的道路,总费用 $5+4+1+1+2=13$。

【数据范围】

  • $1 \le n \le 10^4$,$1 \le m \le 10^6$,$0 \le k \le 10$;
  • $1 \le u_i, v_i \le n$,$u_i \ne v_i$,$0 \le w_i \le 10^9$;
  • $0 \le c_j \le 10^9$,$0 \le a_{j,i} \le 10^9$;
  • 任意两座原有城市都能通过原有道路相互到达。

测试点 25 个等分。特殊性质 A:所有 $c_j = 0$ 且均存在 $a_{j,i}=0$。

原题另有附加样例 road2~road4(已收录为本题测试点)。