CF1869B 2D Traveling

题目描述

Piggy 生活在一个带有笛卡尔坐标系的无限平面上。 平面上有 $n$ 个城市,编号从 $1$ 到 $n$,其中前 $k$ 个城市被定义为主要城市。第 $i$ 个城市的坐标为 $(x_i, y_i)$。 Piggy 作为一名经验丰富的旅行者,在中考结束后想要进行一次轻松的旅行。目前,他在城市 $a$,想要乘飞机前往城市 $b$。你可以在任意两个城市之间飞行,并且在旅行途中可以以任意顺序访问若干城市,但最终目的地必须是城市 $b$。 由于主要城市之间贸易活跃,主要城市之间可以免费乘坐飞机。具体来说,城市 $i$ 和城市 $j$ 之间的机票价格 $f(i, j)$ 定义如下: $$ f(i, j) = \begin{cases} 0, & \text{如果城市 } i \text{ 和城市 } j \text{ 都是主要城市} \\ |x_i - x_j| + |y_i - y_j|, & \text{否则} \end{cases} $$ Piggy 并不想节省时间,但他想节省金钱。因此,你需要告诉他,如果他可以乘坐任意次数的航班,所有机票的总费用的最小值是多少。

输入格式

输入的第一行为一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。接下来是每个测试用例的描述。 每个测试用例的第一行为四个整数 $n$、$k$、$a$ 和 $b$($2 \le n \le 2 \cdot 10^5$,$0 \le k \le n$,$1 \le a, b \le n$,$a \ne b$),分别表示城市的数量、主要城市的数量、起点城市编号和终点城市编号。 接下来的 $n$ 行中,第 $i$ 行包含两个整数 $x_i$ 和 $y_i$($-10^9 \le x_i, y_i \le 10^9$),表示第 $i$ 个城市的坐标。前 $k$ 行描述主要城市。保证所有城市的坐标两两不同。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出一个整数,表示所有机票总费用的最小值。

说明/提示

在第一个测试用例中: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1869B/5d562a7fae0997b047c9a0448bd832cdb0a43e6a.png) 主要城市用红色标记。最优的航班选择方式为:$3 \rightarrow 1 \rightarrow 2 \rightarrow 5$,总费用为 $3+0+1=4$。注意航班 $1 \rightarrow 2$ 的费用为 $0$,因为城市 $1$ 和 $2$ 都是主要城市。 在第二个测试用例中,只有 $2$ 个城市,唯一的方式是从城市 $1$ 飞到城市 $2$。 在第三个测试用例中,城市 $2$ 和 $4$ 都是主要城市,Piggy 可以直接从城市 $2$ 飞到城市 $4$,费用为 $0$。 在第四个测试用例中,Piggy 可以选择以下航班:$3 \rightarrow 2 \rightarrow 1$,总费用为 $11+11=22$。 由 ChatGPT 4.1 翻译