#CSES1672. 最短路径 II

最短路径 II

题目背景

翻译自 CSES-1672 题。

题目描述

nn 个城市和 mm 条道路连接它们。每条道路都是双向的,并有一个长度。你的任务是处理 qq 个查询,对于每个查询,输出两个给定城市之间的最短路径长度。如果两个城市之间没有路径,则输出 1-1

输入格式

第一行包含三个整数 n,m,qn, m, q,分别表示城市的数量、道路的数量和查询的数量。

接下来 mm 行,每行包含三个整数 a,b,ca, b, c,表示城市 aa 和城市 bb 之间有一条长度为 cc 的双向道路。

接下来 qq 行,每行包含两个整数 a,ba, b,表示一次查询,你需要输出城市 aa 和城市 bb 之间的最短路径长度。

输出格式

对于每个查询,输出一行一个整数,即最短路径长度。若两城市不连通,输出 1-1

样例

4 3 5
1 2 5
1 3 9
2 3 3
1 2
2 1
1 3
1 4
3 2
5
5
8
-1
3

样例解释

道路网络:121 \leftrightarrow 2 (5),131 \leftrightarrow 3 (9),232 \leftrightarrow 3 (3)。

  • 查询 121 \to 2:最短路径为 121 \to 2,长度 55
  • 查询 212 \to 1:最短路径为 212 \to 1,长度 55
  • 查询 131 \to 3:最短路径为 1231 \to 2 \to 3,长度 5+3=85+3=8
  • 查询 141 \to 4:城市 44 与任何城市都没有道路,不连通,输出 1-1
  • 查询 323 \to 2:最短路径为 323 \to 2,长度 33

数据范围

  • 1n5001 \leq n \leq 500
  • 1mn21 \leq m \leq n^2
  • 1q1051 \leq q \leq 10^5
  • 1a,bn1 \leq a,b \leq n
  • 1c1091 \le c \le 10^9