#HK5089. 「POI2019 R3」长途旅行 Long travels

「POI2019 R3」长途旅行 Long travels

题目描述

题目译自 XXVI Olimpiada Informatyczna – III etap Długie podróże

Bajtazar 在 25 年的信息学奥赛中结识了许多朋友,足迹遍布拜托城。然而,他的朋友分散在各地,探访颇为不易。拜托城有 nn 个城市,通过 mm 条双向航线连接,网络设计确保任意两城市间可达(通常需换乘)。

根据新交通法,每条航线票价固定为 11。Bajtazar 提出 pp 个问题:「从朋友所在城市 sis_i 飞到城市 tit_i 需要多少费用?」你希望帮助他规划最便宜的路线。

你注意到,Bajtazar 询问的朋友相距甚远,最短路线至少需 n10\frac{n}{10} 次飞行。回答他的查询,助他在下届奥赛前探访所有朋友!

输入格式

第一行包含三个整数 n,m,pn, m, p $(2 \leq n \leq 100000, n-1 \leq m \leq 200000, 1 \leq p \leq 200000)$,分别表示城市数、航线数和查询数。城市编号为 11nn

接下来的 mm 行描述航线,第 ii 行包含两个整数 ai,bia_i, b_i (1ai,bin,aibi)(1 \leq a_i, b_i \leq n, a_i \neq b_i),表示城市 aia_ibib_i 间有双向航线。每条航线至多描述一次。

接下来的 pp 行描述查询,第 ii 行包含两个整数 si,tis_i, t_i (1si,tin,siti)(1 \leq s_i, t_i \leq n, s_i \neq t_i),表示从城市 sis_itit_i 的最短飞行次数查询。保证每条路线费用至少 n10\frac{n}{10}

输出格式

输出 pp 行,第 ii 行包含一个整数,表示第 ii 个查询的最短飞行次数。

6 7 2
1 2
2 4
3 1
3 4
4 5
4 6
6 5
2 5
1 6

2
3

从城市 2255 的最短路线为 2452 \rightarrow 4 \rightarrow 5,需 22 次飞行。从城市 1166 的最短路线为 13461 \rightarrow 3 \rightarrow 4 \rightarrow 6,需 33 次飞行。

附加样例

  1. n=10,m=30,p=45n=10, m=30, p=45
  2. n=100n=100,航线形成环。
  3. n=100000n=100000,航线形成两个相接的环。

数据范围与提示

详细子任务附加限制及分值如下表所示。

子任务 附加限制 分值
11 p=1p=1 77
22 m=n1m=n-1,每城市至多有 22 条航线 88
33 m=n1m=n-1 99
44 m=nm=n 1616
55 城市 aa (a{1,,n})(a \in \{1, \ldots, n\}) 仅与 a5,a1,a+1,a+5a-5, a-1, a+1, a+5 有航线 1919
66 p50000p \leq 50000 2020
77 无附加限制 2121