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

「JOI 2013 Final」 现代豪宅

题目描述

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

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

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

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

任务

给出豪宅的大小 M,N M,N ,以及存在开关的 K K 个房间的位置 (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,K M,N,K M M 表示东西方向上房间的个数, N N 表示南北方向上房间的个数, K K 表示存在开关的房间的个数。
  • 接下来 K K 行中的第 i i (1iK) (1 \leq i \leq K) 为两个以空格分开的整数 Xi,Yi X_i,Y_i 。表示房间 (Xi,Yi) (X_i,Y_i) 中存在开关。这 K K 个二元组 (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

对于此样例,可以通过以下的行动来在 4 4 分钟之内从房间 (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)

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

TIM20180812165656.png

3 2 1
2 1
-1

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

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

初始状态:

TIM20180812200833.png

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

数据范围与提示

对于所有数据,2M,N105, 2 \leq M, N \leq 10^5, 1K2×105, 1 \leq K \leq 2×10^5, 1XiM, 1 \leq X_i \leq M, 1YiN 1 \leq Y_i \leq N

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