QOJ.ac

QOJ

حد الوقت: 5.0 s حد الذاكرة: 256 MB مجموع النقاط: 100

#18534. Antichamber

الإحصائيات

在电子游戏《Antichamber》中,玩家拥有一个名为 Brick 工具的特殊工具。你需要在一个简单的二维变体中模拟它的工作过程。

游戏在一个无限网格上进行。每个格子要么是白色,要么是黑色。如果两个格子共享一条边,则称它们是相邻的。黑色格子的极大连通集合被称为一个连通块。连通块的大小是其中包含的格子数量。

该工具允许玩家将任意一个格子翻转为相反的颜色。染色后会立即进行一系列检查,这些检查可能会改变网格的状态。

如果一个格子被染成了白色,且连通块的数量增加了,说明某个连通块分裂成了若干个子连通块。在这种情况下,新形成的子连通块将被移除,但可能保留其中最大的一个。只有当最大子连通块的大小严格大于所有其他子连通块大小之和时,该最大子连通块才不会被移除。移除一个连通块意味着将其中的所有格子重新染成白色。

接着,无论被染色的格子是什么颜色,连通块中的“洞”都会被消除:如果任何白色格子位于由黑色格子组成的环的内部,它就会被染成黑色。环中任意两个相邻的格子必须满足上述定义的相邻关系。

最初所有格子都是白色的。给定一个操作序列。每个操作要么是给一个格子染色,要么是一个查询。所有操作必须按给定顺序执行。

查询有两种类型:

  • Comp 类型查询:给定的两个格子是否都是黑色且属于同一个连通块?
  • Size 类型查询:求包含给定格子的连通块的大小。如果该格子是白色的,则答案应为 0。

输入格式

第一行包含一个整数 $N$ — 操作和查询的总数($1 \le N \le 10^5$)。接下来的 $N$ 行,每行包含一个操作的描述。

操作格式如下:

  • Draw x y — 将坐标为 $(x, y)$ 的格子翻转为相反的颜色;
  • Size x y — 求包含坐标为 $(x, y)$ 的格子的连通块大小;
  • Comp x1 y1 x2 y2 — 确定坐标为 $(x_1, y_1)$ 和 $(x_2, y_2)$ 的格子是否属于同一个连通块。

所有坐标均为不超过 $10^6$ 的正整数。

输出格式

按照查询在输入文件中出现的顺序,每行输出一个答案。

对于 Size 类型的查询,输出一个整数。

对于 Comp 类型的查询,输出 YESNO

样例

输入样例 1

38
Draw 2 2
Draw 2 3
Draw 2 4
Draw 2 5
Draw 2 6
Draw 3 6
Draw 4 6
Draw 5 5
Draw 5 4
Draw 4 4
Draw 4 2
Size 4 2
Size 2 4
Size 4 4
Size 3 3
Comp 2 2 2 4
Comp 2 2 4 4
Comp 3 3 4 4
Draw 3 2
Draw 4 3
Size 2 2
Draw 5 6
Size 2 2
Draw 3 3
Size 3 3
Comp 3 3 4 4
Draw 2 4
Draw 3 4
Draw 4 4
Size 3 2
Size 3 6
Draw 4 7
Draw 3 5
Size 2 5
Draw 4 6
Size 2 5
Size 4 5
Size 4 7

输出样例 1

1
7
3
0
YES
NO
NO
13
18
18
YES
0
9
9
0
0
0

说明

下图中的数字表示对应位置使用 Brick 工具的顺序。

第 14 次使用 Brick 工具后的游戏区域

第 15 次使用 Brick 工具不会引起游戏区域的变化

第 18 次使用 Brick 工具后的游戏区域

第 21 次使用 Brick 工具后,游戏区域中的所有格子将再次变回白色

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.