7287 - 道路修复(road)
C 国的交通系统由 n 座城市与 m 条连接两座城市的双向道路构成,第 i (1 \leq i \leq m) 条道路连接城市 u_i 和 v_i。任意两座城市都能通过若干条道路相互到达。
然而,近期由于一场大地震,所有 m 条道路都被破坏了,修复第 i (1 \leq i \leq m) 条道路的费用为 w_i。与此同时,C 国还有 k 个准备进行城市化改造的乡镇。对于第 j (1 \leq j \leq k) 个乡镇,C 国对其进行城市化改造的费用为 c_j。在城市化改造完第 j (1 \leq j \leq k) 个乡镇后,可以在这个乡镇与原来的 n 座城市间建造若干条道路,其中在它与第 i (1 \leq i \leq n) 座城市间建造一条道路的费用为 a(j,i)。C 国可以在这 k 个乡镇中选择任意多个进行城市化改造,也可以不选择任何乡镇进行城市化改造。
为尽快恢复城市间的交通,C 国政 府希望以最低的费用将原有的 n 座城市两两连通,也即任意两座原有的城市都能通过若干条修复或新建造的道路相互到达。你需要帮助他们求出,将原有的 n 座城市两两连通的最小费用。
输入
输入的第一行包含三个非负整数 n, m, k,分别表示原有的城市数量、道路数量和准备进行城市化改造的乡镇数量。
输入的第 i+1 (1 \leq i \leq m) 行包含三个非负整数 u_i, v_i, w_i,表示第 i 条道路连接的两座城市与修复该道路的费用。
输入的第 j+m+1 (1 \leq j \leq k) 行包含 n+1 个非负整数 c_j, a(j,1), a(j,2), \ldots, 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 解释】
C 国政 府可以选择修复第 3 条和第 4 条道路,然后将第 1 个乡镇进行城市化改造,并建造它与第 1,3 座城市间的道路,总费用为 5 + 4 + 1 + 1 + 2 = 13。可以证明,不存在比 13 更小的费用能使原有的 4 座城市两两连通。
【样例 2】
见选手目录下的 road/road2.in 与 road/road2.ans。
该样例满足测试点 11,12 的约束条件。
【样例 3】
见选手目录下的 road/road3.in 与 road/road3.ans。
该样例满足测试点 13,14 的约束条件。
【样例 4】
见选手目录下的 road/road4.in 与 road/road4.ans。
该样例满足测试点 15,16 的约束条件。
【数据范围】
对于所有测试数据,保证:
- 1 \leq n \leq 10^4,1 \leq m \leq 10^6,0 \leq k \leq 10;
- 对于所有 1 \leq i \leq m,均有 1 \leq u_i, v_i \leq n, u_i \neq v_i 且 0 \leq w_i \leq 10^9;
- 对于所有 1 \leq j \leq k,均有 0 \leq c_j \leq 10^9;
- 对于所有 1 \leq j \leq k,1 \leq i \leq n, 均有 0 \leq a(j,i) \leq 10^9;
- 任意两座原有的城市都能通过若干条原有的道路相互到达。

来源
CSP