CF1450B Balls of Steel

题目描述

你有 $n$ 个平面上的不同点 $(x_1, y_1),\ldots,(x_n,y_n)$,以及一个非负整数参数 $k$。每个点都是一个微观钢球,$k$ 是钢球被充能时的吸引力。所有钢球的吸引力都相同。 每次操作,你可以选择一个钢球 $i$ 进行充能。被充能后,所有与钢球 $i$ 的曼哈顿距离不超过 $k$ 的钢球都会移动到钢球 $i$ 的位置。一次操作后,可能有多个钢球处于同一坐标。 更正式地说,对于所有满足 $|x_i - x_j| + |y_i - y_j| \le k$ 的钢球 $j$,我们令 $x_j := x_i$ 且 $y_j := y_i$。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1450B/bd476820b8f47c8050ef448d8375a731892e001a.png) 一次操作的示例。充能中心的钢球后,另外两个钢球移动到它的位置。右图中,中心的红点是这些钢球的共同位置。你的任务是求出将所有钢球移动到同一位置所需的最少操作次数,或者报告这不可能实现。

输入格式

第一行包含一个整数 $t$($1 \le t \le 100$),表示测试用例的数量。 每个测试用例的第一行包含两个整数 $n$、$k$($2 \le n \le 100$,$0 \le k \le 10^6$),分别表示钢球的数量和所有钢球的吸引力。 接下来的 $n$ 行描述钢球的坐标。第 $i$ 行包含两个整数 $x_i$、$y_i$($0 \le x_i, y_i \le 10^5$),表示第 $i$ 个钢球的坐标。 保证所有点互不相同。

输出格式

对于每个测试用例,输出一个整数,表示将所有钢球移动到同一位置所需的最少操作次数。如果无法实现,输出 $-1$。

说明/提示

在第一个测试用例中,有三个钢球,坐标分别为 $(0, 0)$、$(3, 3)$ 和 $(1, 1)$,吸引力为 $2$。可以通过一次操作将两个钢球聚在一起,但无论多少次操作都无法将三个钢球聚在一起。 在第二个测试用例中,有三个钢球,坐标分别为 $(6, 7)$、$(8, 8)$ 和 $(6, 9)$,吸引力为 $3$。无论选择哪个钢球充能,其他两个都会移动到同一位置,因此只需一次操作。 在第三个测试用例中,有四个钢球,坐标分别为 $(0, 0)$、$(0, 1)$、$(0, 2)$ 和 $(0, 3)$,吸引力为 $1$。可以证明,无法通过一系列操作将所有钢球移动到同一位置。 由 ChatGPT 4.1 翻译