QOJ.ac

QOJ

时间限制: 6 s 内存限制: 256 MB 总分: 100

#14755. 配送

统计

拜塔扎尔正在训练,以成为一名职业的 Forkbajt 玩家。Forkbajt 的游戏在一个 $n \times n$ 的网格上进行,其行和列从 $1$ 到 $n$ 编号。位于第 $1$ 行第 $1$ 列的格子是拜塔扎尔的城堡。其余的每个格子上可能有一个障碍物,或者一个堡垒。整个游戏持续 $q + 1$ 天,在每两天的夜里,我们会收到关于建造或拆除某个堡垒的信息。

每天,拜塔扎尔必须向所有当前存在的堡垒发送消息。一天由多个回合组成。在每个回合中,拜塔扎尔可以招募一名新的英雄,并命令他从城堡出发前往其中一个堡垒(并在那里传递消息)。接着,每位英雄可以移动到相邻的格子(向左、向右、向上或向下)。英雄可以经过有堡垒的格子,但不能经过有障碍物的格子。在任何一个回合结束时,不能有两名英雄位于同一个格子上。我们希望确定向所有堡垒传递消息所需的最少回合数。

你的任务是,对于这 $q + 1$ 天中的每一天,求出向所有当前存在的堡垒传递消息所需的最少回合数。我们保证没有任何堡垒会与城堡“断开连接”,也就是说,总是可以从城堡到达任何当前存在的堡垒。

输入格式

输入的第一行包含两个整数 $n$ 和 $q$($2 \le n \le 1000$,$0 \le q \le 500\,000$),分别表示网格的大小和天数。

接下来的 $n$ 行包含对网格各行的描述。一行的描述由 $n$ 个字符组成,其中:

  • # 表示障碍物,
  • F 表示堡垒,
  • . 表示空地。

第 $1$ 行第 $1$ 列的格子总是由 Z 表示,代表拜塔扎尔的城堡。

接下来的 $q$ 行包含对网格后续变化的描述。其中第 $i$ 行(对于 $1 \le i \le q$)包含两个整数 $x_i, y_i$($1 \le x_i, y_i \le n$),表示在第 $i$ 天和第 $i+1$ 天之间,位于第 $x_i$ 行第 $y_i$ 列的格子(该格子既没有障碍物也不是拜塔扎尔的城堡)改变了状态:如果之前是堡垒,则现在不再是(被拆除);如果之前不是,则现在是(被建造)。

输出格式

你的程序应该输出 $q + 1$ 行。在第 $i$ 行(对于 $1 \le i \le q + 1$)中,输出在第 $i$ 天向所有堡垒传递消息所需的最少回合数。

样例

输入样例 1

4 3
Z...
###.
F.#F
...F
3 2
4 1
3 1

输出样例 1

10
10
11
10

说明

样例解释:在第一天(第 1 次询问),我们可以在 10 个回合内将消息传递到所有堡垒,具体方式如下(各列表示连续的回合):

  • 英雄 1:$(1, 2) \to (1, 3) \to (1, 4) \to (2, 4) \to (3, 4) \to (4, 4) \to (4, 3) \to (4, 2) \to (3, 2) \to (3, 1)$
  • 英雄 2:$(1, 2) \to (1, 3) \to (1, 4) \to (2, 4) \to (3, 4) \to (4, 4)$
  • 英雄 3:$(1, 2) \to (1, 3) \to (1, 4) \to (2, 4) \to (3, 4)$

其他样例测试:测试 0a 为上述样例。此外:

  • 0b:$n = 6, q = 0$,除了 $(1, 1)$(城堡)和 $(6, 6)$(障碍物)外,所有格子上都有堡垒。
  • 0c:$n = 1000, q = 100\,000$,网格上没有障碍物,堡垒从最远可能的位置开始依次出现,然后以相同的顺序依次消失。

子任务

测试集分为以下子任务。每个子任务的测试由一个或多个独立的测试点组组成。

子任务 附加限制 分值
1 $n \le 100, q \le 10^4$ 19
2 $q = 0$ 13
3 $q \le 100\,000$,网格上没有障碍物 17
4 无附加限制 51

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.