luogu#P16358. [BalticOI 2026] Island

    ID: 16537 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 8 上传者: 标签>图论建模最近公共祖先 LCABalticOI(波罗的海)2026

[BalticOI 2026] Island

题目描述

给定一个 n×nn\times n 的网格,每个格子要么是陆地,要么是水域。网格的行和列均从 11nn 编号。你可以在网格中向左、右、上、下一步移动。如果在移动过程中始终停留在同一种类型的格子上,则称这两个格子是连通的。

所有陆地格子构成一个连通的岛屿,而所有水域格子构成一个连通的海洋。网格的第一行、最后一行、第一列和最后一列均只包含水域格子。

你的任务是回答 qq 个询问:给定两个陆地格子 (r1,c1)(r_1,c_1)(r2,c2)(r_2,c_2),从第一个格子出发,在只经过陆地格子的前提下,到达第二个格子所需的最少步数是多少?

输入格式

第一行包含两个整数 nnqq,分别表示网格的大小和询问的数量。

接下来 nn 行,每行包含 nn 个字符,描述整个网格。其中 "." 表示水域格子,"#" 表示陆地格子。

再接下来 qq 行,每行包含四个整数 r1r_1, c1c_1, r2r_2c2c_2,依次表示第一个格子的行、列,以及第二个格子的行、列。

输出格式

对于每个询问,输出一行一个整数表示答案。

8 4
........
..####..
.##.###.
.##.###.
.#......
.#####..
..#####.
........
2 3 3 7
4 5 4 5
4 7 7 7
6 2 3 2
5
0
17
3

提示

数据范围

  • 3n10003\le n\le 1000
  • 1q1051\le q\le 10^5
  • 所有询问满足 1<r1,c1,r2,c2<n1 < r_1,c_1,r_2,c_2 < n

子任务

子任务 约束条件 分值
1 n200n \le 200, q200q \le 200 1010
2 没有一行或一列在陆地格子之间存在水域格子 66
3 不存在任何 2×22\times2 的区域全为陆地格子 1616
4 没有一行在陆地格子之间存在水域格子 2828
5 无额外限制 4040

翻译由 DeepSeek V4 Pro 完成