题目大意:n个城市m条路,每条路费用为ci,可以选择k个城镇,这k个城镇到n个城市的费用分别是aij,城镇的费用是si,先要求n个城市可以互相到达,最小费用是多少?
题目描述
为尽快恢复城市间的交通,C 国政$ $府希望以最低的费用将**原有**的 $n$ 座城市两两连通,也即任意两座原有的城市都能通过若干条修复或新建造的道路相互到达。你需要帮助他们求出,将原有的 $n$ 座城市两两连通的最小费用。
输入格式
输入的第 $j+m+1$ ($1 \leq j \leq k$) 行包含 $n+1$ 个非负整数 $c_j, a_{j,1}, a_{j,2}, \ldots, a_{j,n}$,分别表示将第 $j$ 个乡镇进行城市化改造的费用与在该乡镇与原有的城市间建造道路的费用。
输出格式
说明/提示
### 【样例 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$;
– 任意两座原有的城市都能通过若干条原有的道路相互到达。
::cute-table{tuack}
| 测试点编号 | $n \leq$ | $m \leq$ | $k \leq$ | 特殊性质 |
| :–: | :–: | :–: | :–: | :–: |
| $1 \sim 4$ | $10^4$ | $10^6$ | $0$ | 无 |
| $5, 6$ | $10^3$ | $10^5$ | $5$ | A |
| $7, 8$ | ^ | ^ | ^ | 无 |
| $9, 10$ | ^ | $10^6$ | ^ | A |
| $11, 12$ | ^ | ^ | ^ | 无 |
| $13, 14$ | ^ | ^ | $10$ | A |
| $15, 16$ | ^ | ^ | ^ | 无 |
| $17, 18$ | $10^4$ | ^ | $5$ | A |
| $19, 20$ | ^ | ^ | ^ | 无 |
| $21 \sim 25$ | ^ | ^ | $10$ | ^ |
特殊性质 A:对于所有 $1 \leq j \leq k$,均有 $c_j = 0$ 且均存在 $1 \leq i \leq n$ 满足 $a_{j,i} = 0$。
解题思路
k很小,暴力枚举选哪些城镇,即转换成最小生成树问题。
每次求最小生成树,重新排序会超时,可以提前排序;100万条边,至多选择1万条,提前做一次最小生成树可以去掉无用边。
1e8需要控制常数,找到生成树break提高效率。
程序实现

原来是这样用的 😉