#P14422. [JOISC 2014] 水壶 / Water Bottle

    ID: 16189 远端评测题 5000ms 512MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>2014倍增广度优先搜索 BFS生成树JOISC/JOIST(日本)

[JOISC 2014] 水壶 / Water Bottle

题目背景

翻译来自于 https://loj.ac/p/2876

题目描述

JOI 君所居住的 IOI 市以一年四季都十分炎热著称。

IOI 市被分成 HH 行,每行包含 WW 块区域。每个区域都是建筑物、原野、墙壁之一。

IOI 市有 PP 个区域是建筑物,坐标分别为 (A1,B1),(A2,B2),,(AP,BP)(A_1,B_1),(A_2,B_2),\dots,(A_P,B_P)

JOI 君只能进入建筑物与原野,而且每次只能走到相邻的区域中,且不能移动到市外。

JOI 君因为各种各样的事情,必须在各个建筑物之间往返。虽然建筑物中的冷气设备非常好,但原野上太阳非常毒辣,因此在原野上每走过一个区域都需要 1 升水。此外,原野上没有诸如自动售货机、饮水处之类的东西,因此 IOI 市的市民一般都携带水壶出行。大小为 xx 的水壶最多可以装 xx 升水,建筑物里有自来水可以将水壶装满。

由于携带大水壶是一件很困难的事情,因此 JOI 君决定携带尽量小的水壶移动。因此,为了随时能在建筑物之间移动,请你帮他写一个程序来计算最少需要多大的水壶。

现在给出 IOI 市的地图和 QQ 个询问,第 ii 个询问包含两个整数 Si,TiS_i,T_i,对于每个询问,请输出:要从建筑物 SiS_i 移动到 TiT_i,至少需要多大的水壶?

题目

给定 IOI 市的地图及 QQ 个查询。第 ii 个查询(1iQ1 \le i \le Q)要求计算“在建筑物 SiS_iTiT_i 之间移动所需的最小水壶容量”。请编写程序,对每个查询给出答案。

输入格式

从标准输入读取以下数据。

  • 第一行四个空格分隔的整数 H,W,P,QH,W,P,Q
  • 接下来 HH 行,第 ii 行有一个长度为 WW 的字符串,每个字符都是 .# 之一,. 表示这个位置是建筑物或原野,# 表示这个位置是墙壁。
  • 接下来 PP 行描述 IOI 市每个建筑物的位置,第 ii 行有两个空格分隔的整数 AiA_iBiB_i ,表示第 ii 个建筑物的位置在第 AiA_i 行第 BiB_i 列。保证这个位置在地图中是 .
  • 接下来 QQ 行,第 ii 行有两个空格分隔的整数 Si,TiS_i ,T_i

输出格式

输出 QQ 行,第 ii 行一个整数,表示要从建筑物 SiS_i 移动到 TiT_i,至少需要多大的水壶。

如果无法到达,输出 -1。如果不需要经过原野就能到达,输出 0

5 5 4 4
.....
..##.
.#...
..#..
.....
1 1
4 2
3 3
2 5
1 2
2 4
1 3
3 4
3
4
4
2
5 5 3 2
...#.
..#..
#....
.##..
...#.
1 3
5 2
1 5
1 2
1 3
-1
7

提示

样例 1 解释

在此输入中,IOI 市的地图如下图所示。标有黑色方块的格子表示墙壁,标有数字的格子表示对应编号的建筑物,空白格子表示草地。

:::align{center} :::

例如,考虑从建筑物 2 移动到建筑物 4。此时,如果不经过其他建筑物,最优的路径是经过左图中用点标出的格子,这样经过的草地格子数最少,需要容量为 66 的水壶。

:::align{center} :::

然而,如果像右图所示那样,在移动过程中经过建筑物 1,则从建筑物 2 到建筑物 1 的移动过程中经过 33 个草地格子,从建筑物 1 到建筑物 4 的移动过程中经过 44 个草地格子,因此可以使用容量为 44 的水壶完成移动。此外,无法使用容量小于 44 的水壶完成移动。

数据范围

所有的输入数据满足以下条件:

  • 1H20001 \leq H \leq 2000
  • 1W20001 \leq W \leq 2000
  • 2P200 0002 \leq P \leq 200\ 000
  • 1Q200 0001 \leq Q \leq 200\ 000
  • 1AjH1 \leq A_j \leq H1jP1 \leq j \leq P)。
  • 1BjW1 \leq B_j \leq W1jP1 \leq j \leq P)。
  • (Ai,Bi)(Aj,Bj)(A_i, B_i) \neq (A_j, B_j)1i<jP1 \leq i < j \leq P)。
  • 1Si<TiP1 \leq S_i < T_i \leq P1iQ1 \leq i \leq Q)。

子任务

子任务 1 [10 分]

满足以下条件:

  • H200H \leq 200
  • W200W \leq 200
  • P200P \leq 200

子任务 2 [30 分]

满足以下条件:

  • P5 000P \leq 5\ 000
  • Q=1Q = 1

子任务 3 [30 分]

满足以下条件:

  • P5 000P \leq 5\ 000
  • Q10 000Q \leq 10\ 000

子任务 4 [30 分]

没有额外的限制。