P16708 [SEATST 2026] 麻烦的旅程 / Troublesome Trip

题目描述

一个被称为 Nuko 的独特而神秘的物种栖息在世界偏远角落的一个群岛上。该群岛可以建模为 $N$ 个岛屿,编号从 $0$ 到 $N - 1$ ,由 $M$ 座桥梁连接。对于所有 $0 \le i \le M - 1$ ,每座桥 $i$ 双向连接两个岛屿 $U[i]$ 和 $V[i]$ 。保证可以从任意一个岛屿到达其他任意岛屿。每座桥连接两个不同的岛屿,并且没有两座桥连接相同的一对岛屿。 在远古时代,Nukos 仅居住在 $0$ 号岛屿上。然而,随着时间的推移,Nukos 已经扩散到了所有岛屿。每当一群 Nukos 穿过桥梁到达一个新岛屿时,它们就会经历进化,从而形成与前一个岛屿上不同的亚种。具体来说,对于所有 $0 \le j \le N - 1$ ,$j$ 号岛屿上的 Nukos 属于亚种 $s_j$ ,其中 $s_j$ 是从 $0$ 号岛屿到达 $j$ 号岛屿必须经过的最少桥梁数。比如, $0$ 号岛屿上的 Nukos 属于亚种 $0$ 。 你是一名旅行者,打算使用这些桥梁从 $A$ 号岛屿旅行到 $B$ 号岛屿。保证 $A \ne B$ 。当你在某个岛屿上时,你不可避免地会遇到居住在那里的 Nukos 亚种。由于每个亚种都有自己的习俗你需要适应,而适应不同的习俗可能会很麻烦,因此你的目标是选择一条路径,使得你遇到的不同 Nuko 亚种的数量最小化。 你能计算出在从 $A$ 号岛屿旅行到 $B$ 号岛屿时,你必须遇到的最少的不同 Nuko 亚种数量吗? ### 实现详情 你需要实现以下函数。 ```cpp int min_distinct(int N, int M, int A, int B, std::vector U, std::vector V) ``` - $N$ :岛屿的数量。 - $M$ :桥梁的数量。 - $A$ :你旅行的起点。 - $B$ :你旅行的终点。 - $U$ 、 $V$ :长度为 $M$ 的数组,描述这些桥梁。 - 此函数应返回你必须遇到的不同 Nuko 亚种的最小数量。

输入格式

``` N M A B U[0] V[0] U[1] V[1] ... U[M - 1] V[M - 1] ```

输出格式

一个整数,表示 `min_distinct` 函数的返回值。

说明/提示

### 样例 考虑以下函数调用。 ```cpp min_distinct(5, 5, 2, 4, [0, 1, 2, 3, 4], [1, 2, 3, 4, 0]) ``` 岛屿的示意图如下所示,不同的阴影代表不同的 Nuko 亚种。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/kc1soswd.png) ::: 对于样例 $1$ ,最优路径是 $2 - 3 - 4$ 。遇到的 Nuko 亚种有 $1$ 和 $2$ 。因此,该调用应返回 $2$ 。 ```cpp min_distinct(8, 9, 4, 7, [0, 0, 0, 1, 1, 2, 2, 6, 7], [1, 2, 3, 4, 5, 5, 6, 3, 3]) ``` 岛屿的示意图如下所示,不同的阴影代表不同的 Nuko 亚种。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/j2nt5dow.png) ::: 对于样例 $2$ ,最优路径是 $4 - 1 - 5 - 2 - 6 - 3 - 7$ 。遇到的 Nuko 亚种有 $1$ 和 $2$ 。因此,该调用应返回 $2$ 。 ```cpp min_distinct(15, 17, 3, 7, [0, 1, 2, 3, 4, 13, 12, 12, 11, 10, 10, 9, 8, 7, 6, 8, 0], [1, 2, 3, 4, 13, 12, 1, 11, 10, 9, 5, 8, 7, 6, 5, 14, 14]) ``` 对于样例 $3$ ,从 $3$ 号岛屿旅行到 $7$ 号岛屿时,你必须遇到的不同 Nuko 亚种的最少数量为 $3$ 。因此,该调用应返回 $3$ 。 ### 约束 - $2 \le N \le 5\ 000\ 000$ 。 - $1 \le M \le 5\ 000\ 000$ 。 - $0 \le A, B \le N - 1$ 。 - $A \ne B$ - 对于所有 $0 \le i \le M - 1$ , $0 \le U[i], V[i] \le N - 1$ 。 - 对于所有 $0 \le i \le M - 1$ , $U[i] \ne V[i]$ 。 - 对于所有 $0 \le i, j \le M - 1$ 和 $i \ne j$ , $(U[i], V[i]) \ne (U[j], V[j])$ 且 $(U[i], V[i]) \ne (V[j], U[j])$ 。 - 保证可以从任意一个岛屿到达其他任意岛屿。 ### 子任务 1. ($4$ 分) $A = 0, N \le 100\ 000, M \le 100\ 000$ 。 2. ($4$ 分) $M = N - 1, N \le 100\ 000, M \le 100\ 000$ 。 3. ($6$ 分) $N \le 300, M \le 300$ 。 4. ($8$ 分) $N \le 4\ 000, M \le 4\ 000$ 。 5. ($22$ 分) $N \le 4\ 000, M \le 1\ 000\ 000$ 。 6. ($14$ 分) $N \le 100\ 000, M \le 100\ 000$ 。 7. ($5$ 分) $N \le 300\ 000, M \le 300\ 000$ 。 8. ($5$ 分) $N \le 500\ 000, M \le 500\ 000$ 。 9. ($32$ 分) 没有额外的约束。 **注意:** 对于子任务 $9$ ,评测程序会占用 $4500$ 毫秒时间限制中的 $1500$ 毫秒。