QOJ.ac

QOJ

実行時間制限: 1 s メモリ制限: 128 MB 満点: 100

#13963. 攀岩

統計

在一个晴朗的日子里,熊猫先生(Mr. Panda)和猫咪拉尔(Rar the Cat)决定去攀岩。攀岩墙上共有 $N$ 块岩石。第 $i$ 块岩石位于距离墙底高度为 $Y_i$、距离墙面中心向右 $X_i$ 个单位的位置。如果 $X_i$ 为负数,则表示它位于中心的左侧。所有岩石的位置都是互不相同的。

为了测试熊猫先生的攀岩技巧,猫咪拉尔决定向他发起挑战。挑战规则如下:

  1. 在这 $N$ 块岩石中,猫咪拉尔会挑选一个包含 $K$ 块岩石的集合,该集合称为 $R$。
  2. 为了赢得挑战,熊猫先生首先必须从集合 $R$ 中选择一对岩石 $(A, B)$。只要 $A \neq B$ 且两块岩石都在集合 $R$ 中,熊猫先生可以自由选择任意一对岩石。
  3. 熊猫先生将从第一块岩石($A$)出发,并尝试前往第二块岩石($B$)。在从 $A$ 到 $B$ 的途中,他可以经过其他岩石,无论这些岩石是否在集合 $R$ 中。
  4. 然而,每块岩石都有一个光滑度 $S_i$。当一块岩石的光滑度较高时,想要伸手够到较远的岩石而不滑落会更加困难。此外,猫咪拉尔只允许他向上攀爬。更具体地说,要从第 $i$ 块岩石移动到第 $j$ 块岩石,必须满足 $\max(|X_i - X_j|, |Y_i - Y_j|) \le \max(S_i, S_j)$ 且 $Y_i < Y_j$。
  5. 如果熊猫先生成功选择了一对岩石 $(A, B)$ 并能从岩石 $A$ 到达岩石 $B$,他就赢得了挑战。如果他无法做到这一点,熊猫先生就输掉了挑战。

请参考样例输入和输出以获取更多细节。

当然,熊猫先生知道存在许多岩石对,使得挑战无法完成。他希望找到最小的 $K$,使得无论猫咪拉尔选择哪组岩石,他都总能完成挑战。他需要你的帮助来找到这个值。

输入格式

你的程序必须从标准输入中读取。

输入的第一行包含一个整数 $N$。

接下来的 $N$ 行,每行包含 3 个整数。第 $(i + 1)$ 行表示第 $i$ 块岩石的 $X_i, Y_i, S_i$。

输出格式

你的程序必须向标准输出输出一行,包含一个整数,即能够确保熊猫先生总是能完成挑战的最小岩石数量。如果熊猫先生永远无法完成挑战,则输出 $-1$。

样例

输入样例 1

5
0 3 2
-1 5 1
4 4 3
-1 1 2
2 2 1

输出样例 1

3

说明 1

当 $K = 2$ 时,存在某些岩石子集使得熊猫先生无法完成挑战。例如,如果猫咪拉尔选择位于 $(-1, 1)$ 和 $(2, 2)$ 的岩石组成集合 $R$,熊猫先生将无法完成挑战。

熊猫先生无法从位于 $(2, 2)$ 的岩石移动到位于 $(-1, 1)$ 的岩石,因为他只能向上攀爬。熊猫先生也无法直接从位于 $(-1, 1)$ 的岩石移动到位于 $(2, 2)$ 的岩石,因为 $\max(|-1 - 2|, |1 - 2|) = 3 > \max(2, 1) = 2$。

另一种选择是间接地从 $(-1, 1)$ 移动到 $(2, 2)$。熊猫先生可以从位于 $(-1, 1)$ 的岩石攀爬到位于 $(0, 3)$ 的岩石,因为 $\max(|-1 - 0|, |1 - 3|) = 2 \le \max(2, 1) = 2$。然而,他无法从位于 $(0, 3)$ 的岩石移动到位于 $(2, 2)$ 的岩石,因为他必须向上攀爬。

此外,可以验证,对于任意 3 块岩石的集合,总能选择一对岩石使得熊猫先生能够完成挑战。

例如,如果猫咪拉尔选择位于 $(-1, 5), (4, 4), (-1, 1)$ 的岩石组成集合 $R$,熊猫先生可以通过选择 $(-1, 5)$ 和 $(-1, 1)$ 这对岩石来完成挑战。

为了完成挑战,他从岩石 $(-1, 1)$ 攀爬到岩石 $(0, 3)$,然后再攀爬到岩石 $(-1, 5)$。中间的岩石不需要属于 $R$。

输入样例 2

3
0 1 2000000
-1 2 2000000
1 2 2000000

输出样例 2

3

说明 2

该测试用例仅对子任务 1, 2 和 5 有效。

如果猫咪拉尔选择高度为 2 的 2 块岩石(即第 2 块和第 3 块岩石),熊猫先生无法完成挑战,因为他必须总是向上攀爬。因此,熊猫先生只有在猫咪拉尔选择所有岩石时,才能保证完成挑战。

输入样例 3

2
0 1 1
0 5 1

输出样例 3

-1

说明 3

该测试用例仅对子任务 2, 3, 4 和 5 有效。

即使猫咪拉尔选择了所有的岩石,熊猫先生也无法完成挑战,因为没有任何方法可以从一块岩石到达另一块岩石。因此,熊猫先生永远无法完成挑战。

子任务

在每个测试点上的最大运行时间为 1.0s。你的程序将在以下输入实例集上进行测试:

子任务 分值 $N$ 其他限制
1 15 $1 \le N \le 20$ 对所有 $i$,有 $S_i = 2 \times 10^6$
2 29 $1 \le N \le 20$ 无其他限制
3 17 $1 \le N \le 500$ 对所有 $i, j$,有 $X_i = 0, S_i = S_j$
4 19 $1 \le N \le 500$ 对所有 $i$,有 $S_i = 1$,且 $Y_i$ 不是 3 的倍数
5 20 $1 \le N \le 500$ 无其他限制

对于所有测试用例,$-10^6 \le X_i \le 10^6$,$1 \le Y_i \le 10^6$,$1 \le S_i \le 2 \times 10^6$。

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.