QOJ.ac

QOJ

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

#8708. 传送门

الإحصائيات

你认为在无限大的彩色网格的 $(0, 0)$ 处放置你的好友是一个有趣的恶作剧。你的好友会在网格上无限地移动,每次移动一步,总是移动到四个相邻的单元格之一。

网格中有 $N$ 个单元格包含传送门。一旦你的好友踏上一个传送门,他们会立即传送到一个随机的传送门(可能是他们刚刚踏上的那个,也可能是另一个)。如果 $(0, 0)$ 处有一个传送门,你的好友在被放置到网格上时也会被传送到某个位置。

作为恶作剧的一部分,你想欺骗你的好友,让他们完全没有察觉到传送门的存在。你的好友唯一能看到的就是他们当前所在单元格的颜色,因此你应该确保从你好友的角度来看,瓷砖的颜色永远不会改变。特别地,如果你的好友认为他们进入了同一个单元格不止一次(例如通过向左移动然后立即向右移动),他们应该看到与第一次认为进入该单元格时相同的颜色。

注意:当你的好友踏上一个传送门时,他们会同时看到他们踏上的单元格的颜色,以及他们被传送到的单元格的颜色。因此,你需要将所有传送门单元格涂成相同的颜色,以避免传送行为被立即发现。

一个简单的解决方案是将所有单元格涂成相同的颜色。但颜色是很棒的!所以你希望尽可能多地使用颜色。

让我们考虑一个例子,传送门位于单元格 $(1, 1)$、$(1, 3)$ 和 $(3, 2)$,你的好友进行了以下移动序列:上、右、下、左。

在移动序列之后,你的好友认为他们回到了起始单元格 $(0, 0)$,但实际上他们也可能最终位于 $(0, 2)$ 或 $(2, 1)$。他们在一开始就已经看到了单元格 $(0, 0)$ 的颜色,所以如果他们现在看到不同的颜色,他们就会意识到一定存在传送门。我们不希望这种情况发生,所以我们必须为这 3 个单元格选择相同的颜色。

不存在任何移动序列使得你的好友认为他们最终位于 $(0, 0)$,而实际上他们最终位于 $(1, 0)$,因此这些单元格可以安全地涂上不同的颜色。

下面你可以看到上述例子中一种使用 4 种颜色的涂色方案。对于这个例子,不可能使用超过 4 种颜色。

让我们考虑另一个例子,传送门位于单元格 $(0, 0)$、$(0, 1)$、$(1, 0)$、$(0, -1)$ 和 $(-1, 0)$。假设你的好友尝试通过先向右移动一次,然后向上移动 3 次来到达单元格 $(1, 3)$。一种可能性是,如果他们在开始时和每一步之后都被传送,他们最终会到达单元格 $(0, 0)$。如果你的好友现在通过向下移动 3 次和向左移动一次回溯到他们认为的单元格 $(0, 0)$,并且在这样做时没有被传送到当前单元格之外,他们最终会到达 $(-1, -3)$。你的好友会认为他们第二次处于单元格 $(0, 0)$,并期望看到相同的颜色。因此,你需要将 $(-1, -3)$ 和 $(0, 0)$ 涂成相同的颜色。

注意,我们最初选择单元格 $(1, 3)$ 并没有什么特别之处。你可以类似地证明其他单元格必须与 $(0, 0)$ 共享一种颜色。

任务

计算在确保你的好友不会察觉到传送门存在的前提下,你可以使用的最大颜色数量。

输入格式

第一行包含整数 $N$ —— 传送门的数量。

接下来的 $N$ 行,每行包含两个整数。第 $i$ 行包含 $x_i$ 和 $y_i$,表示在单元格 $(x_i, y_i)$ 处有一个传送门。

输出格式

输出一个整数 —— 在不让你的好友察觉到传送门的情况下可以使用的最大颜色数量,如果可以使用无限多种颜色,则输出 $-1$。

样例

样例输入 1

3
1 1
1 3
3 2

样例输出 1

4

样例输入 2

5
0 0
1 0
-1 0
0 1
0 -1

样例输出 2

1

样例输入 3

1
1 -1

样例输出 3

-1

数据范围

  • $1 \le N \le 10^5$
  • $-10^6 \le x_i, y_i \le 10^6$(对于所有 $1 \le i \le N$)
  • 没有两个传送门共享相同的坐标。

子任务

子任务编号 分值 附加约束
1 1 $N \le 2$
2 10 $N \le 3$
3 10 对于所有整数 $x_1, x_2, y_1, y_2$:如果位置 $(x_1, y_1)$ 和 $(x_2, y_2)$ 处有传送门,则位置 $(x_1, y_2)$ 处也有传送门。
4 29 $N \le 100$ 且 $-100 \le x_i, y_i \le 100$(对于所有 $1 \le i \le N$)
5 15 $N \le 2000$
6 35 无附加约束

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.