Problem
【Baltic2016】Cities
Description
给定个点,条双向边的图,其中有个点是重要的,每条边都有一定的长度。
现在要你选定一些边来构成一个图,要使得个重要的点相互连通,求边的长度和的最小值。
Input
共行
第行读入,表示个点,个重要的点,条边
第行读入个重要点的编号
第至第行,每行包括个数字,表示有一条从到长度为的双向路径
Output
Sample Input
1 | 4 3 6 |
Sample Output
1 | 11 |
HINT
标签:斯坦纳树
状压DP
Solution
斯坦纳树裸题。
斯坦纳树的基本解法是状压,压缩联通状态进行,表示在点,联通状态为的最小花费。
有两种转移:
- 状态可以通过两个状态组合而来,对于的一个子集,有
- 状态也可以在同层向邻接点扩展,即最短路中的松弛操作,对于边,有,可以跑最短路更新。
此题有点卡,注意不要用SPFA
,要用堆优Dijkstra
。
Code
1 |
|