#L2763. 「JOI 2013 Final」现代豪宅

    ID: 5592 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>图结构最短路Dijkstra状态转移分层图坐标离散化开关状态机

「JOI 2013 Final」现代豪宅

题目描述

题目译自 JOI 2013 Final T3「現代的な屋敷」

你在某个很大的豪宅里迷路了。这个豪宅由东西方向 MM 列,南北方向 NN 行的正方形房间组成。从西面开始第 xx(1xM)(1 \leq x \leq M),从南面开始第 yy(1yN)(1 \leq y \leq N) 的房间用 (x,y)(x,y) 表示。

相邻的两个房间之间都有一扇门。对于每扇门,门关上表示不可通行,门打开表示可以通行。当门打开时,从门一边的房间走到另一边的房间需要 11 分钟。另外,一些房间中有一个开关,如果连续 11 分钟按住这个开关,那么所有关上的门会打开,所有打开的门会关闭。

现在,连接东西两个房间的门全都是关上的,连接南北两个房间的门全都是打开的。你现在在房间 (1,1)(1,1),要在最短时间内移动到房间 (M,N)(M,N)

任务

给出豪宅的大小 M,NM,N,以及存在开关的 KK 个房间的位置 (X1,Y1),(X2,Y2),,(XK,YK)(X_1,Y_1),(X_2,Y_2), \ldots ,(X_K,Y_K)。开始时,连接东西两个房间的门全都是关上的,连接南北的两个房间全都是打开的。请编写程序求出从房间 (1,1)(1,1) 移动到房间 (M,N)(M,N) 最少需要多少时间。不过,当房间 (M,N)(M,N) 不能到达时,请输出 1-1

输入格式

输入标准如下:

  • 第一行为三个以空格分开的整数 M,N,KM,N,KMM 表示东西方向上房间的个数,NN 表示南北方向上房间的个数,KK 表示存在开关的房间的个数。
  • 接下来 KK 行中的第 ii(1iK)(1 \leq i \leq K) 为两个以空格分开的整数 Xi,YiX_i,Y_i。表示房间 (Xi,Yi)(X_i,Y_i) 中存在开关。这 KK 个二元组 (X1,Y1),(X2,Y2),...,(XK,YK)(X_1,Y_1),(X_2,Y_2),...,(X_K,Y_K) 间彼此相异。

输出格式

输出一行一个整数:表示移动所需的最短时间。如果不能到达房间 (M,N)(M,N) 则输出 1-1

样例 1

输入

3 2 1
1 2

输出

4

解释
对于此样例,可以通过以下的行动来在 44 分钟之内从房间 (1,1)(1,1) 到达房间 (3,2)(3,2)。这是最短用时。

  1. 移动到房间 (1,2)(1,2)
  2. 在房间 (1,2)(1,2) 中按住开关。
  3. 移动到房间 (2,2)(2,2)
  4. 移动到房间 (3,2)(3,2)

以上行动可以用下图表示。图中向右为东,向上为北。图中的 × 图案表示你所在的位置,○○ 图案表示开关的位置。

样例 2

输入

3 2 1
2 1

输出

-1

解释
对于此样例,不能到达房间 (3,2)(3,2)

样例 3

输入

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

输出

25

初始状态:连接东西方向的门关闭,连接南北方向的门打开。

请注意:房间 (1,1)(1,1) 和房间 (M,N)(M,N) 中也可能存在开关。

数据范围与提示

对于所有数据,$2 \leq M, N \leq 10^5, 1 \leq K \leq 2 \times 10^5, 1 \leq X_i \leq M, 1 \leq Y_i \leq N$。

子任务编号 分值 附加限制
1 20 M,N1000M, N \leq 1000
2 30 K2000K \leq 2000
3 50