luogu#P11321. [NOISG2020 Qualification] Relay Marathon

[NOISG2020 Qualification] Relay Marathon

题目背景

Nilan 是 Berapur 国家的一位马拉松组织者。他计划在国家内的城市网络中组织一场接力马拉松。

题目描述

该国家共有 NN 个城市,通过 MM 条双向道路连接。每个城市编号为 11NN,每条道路编号为 11MM,第 ii 条道路连接城市 uiu_iviv_i,通行时间为 wiw_i 秒。道路网络中没有自环或重复边。

NN 个城市中,有 KK 个特殊城市,编号分别为 A1,A2,,AKA_1, A_2, \dots, A_K

接力马拉松的规则如下:

  1. 两组人分别从两个起始城市 start1start2 出发;
  2. 第一组人从 start1 前往 finish1
  3. 第一组人到达 finish1 后,第二组人立即(无延迟)从 start2 前往 finish2
  4. 接力马拉松在第二组人到达 finish2 时结束。

接力马拉松的有效条件:

  • start1finish1start2finish2 必须是四个不同的特殊城市。

D(a,b)D(a, b) 表示从城市 aa 到城市 bb 的最短通行时间。如果 aabb 之间无路径,则定义 D(a,b)=D(a, b) = \infty

接力马拉松的总耗时定义为:

D(start1,finish1)+D(start2,finish2)D(start1, finish1) + D(start2, finish2)

你的任务是找到所有有效的起点和终点组合中,总耗时的最小值。

输入格式

  • 第一行包含三个整数 N,M,KN, M, K,分别表示城市数量、道路数量和特殊城市数量。
  • 接下来 MM 行,每行包含三个整数 ui,vi,wiu_i, v_i, w_i,表示城市 uiu_iviv_i 之间有一条通行时间为 wiw_i 秒的道路。
  • 最后一行包含 KK 个整数 A1,A2,,AKA_1, A_2, \dots, A_K,表示特殊城市的编号。

输出格式

输出一个整数,表示接力马拉松的最小总耗时。

5 4 4
1 2 1
3 4 2
4 5 5
5 3 8
3 1 5 2
8
6 6 4
1 2 5
2 4 7
4 6 50
6 5 3
1 5 15
3 5 6
1 5 4 6
15

提示

【样例解释】

对于样例 #1:

  • 有效组合为 start1 = 1, finish1 = 2, start2 = 3, finish2 = 5
  • D(1,2)=1D(1, 2) = 1D(3,5)=7D(3, 5) = 7
  • 总耗时为 1+7=81 + 7 = 8

对于样例 #2:

  • 有效组合为 start1 = 1, finish1 = 4, start2 = 5, finish2 = 6
  • D(1,4)=12D(1, 4) = 12D(5,6)=3D(5, 6) = 3
  • 总耗时为 12+3=1512 + 3 = 15

【数据范围】

  • 4KN1054 \leq K \leq N \leq 10^5
  • $2 \leq M \leq \min \left( \frac{N(N-1)}{2}, 3 \times 10^6 \right)$
  • 1wi10001 \leq w_i \leq 1000
  • 1uiviN1 \leq u_i \neq v_i \leq N
子任务编号 分值 限制条件
11 55 4KN504 \leq K \leq N \leq 50
22 1212 4KN5004 \leq K \leq N \leq 500
33 2525 城市 11 和城市 22 是特殊城市,直接由一条耗时为 11 秒的道路相连,且城市 11 不与其他城市相连,城市 22 也不与其他城市相连
44 5858 无额外限制