P14443 [JOISC 2013] 星际飞船 / Spaceships

题目描述

在宇宙遥远彼端的某个银河系中,存在 $N$ 个拥有发达文明的星球。星球编号为 $1$ 到 $N$。每个星球管理着一艘宇宙飞船,飞船可能处于 **正在前往其他星球** 或 **闲置** 两种状态之一。当星球 $a$ 管理的宇宙飞船正用于前往星球 $b$ 时,该飞船会在星球 $a$ 与 $b$ 之间多次往返。飞船从星球 $a$ 前往星球 $b$ 时,普通旅客可乘船从 $a$ 前往 $b$;但当飞船从星球 $b$ 返回星球 $a$ 时,由于燃料问题或装载货物等原因,普通旅客不可乘船。若星球 $a$ 管理的宇宙飞船处于闲置状态,则该飞船在星球 $a$ 待命。 目前所有宇宙飞船均处于闲置状态。未来的飞船状态变更计划已确定,变更类型如下: - 将星球 $a$ 管理的闲置宇宙飞船设置为前往星球 $b$ 的状态。此操作仅当普通旅客无法通过多次乘船从星球 $b$ 到达星球 $a$ 时方可执行。 - 将星球 $a$ 管理的正在使用的宇宙飞船设置为闲置状态。 计划在该银河系旅行的两人为安排会面计划,准备了若干如下形式的查询: - 在计划的某一时刻,若一人位于星球 $a$,另一人位于星球 $b$,两人能否以普通旅客身份乘宇宙飞船会合?若能,在哪个星球会合所需乘船次数最少?即:是否存在星球 $c$,使得普通旅客可通过多次乘船从星球 $a$ 到达 $c$,且从星球 $b$ 到达 $c$?若存在,哪个星球 $c$ 能使从 $a$ 到 $c$ 与从 $b$ 到 $c$ 的乘船次数之和最小? 作为优秀程序员的你,被要求解答两人的所有查询。 ### 任务 给定按时间顺序排列的宇宙飞船状态变更计划与查询,编写程序回答所有查询。

输入格式

从标准输入读取以下输入数据: - 第 $1$ 行包含以空格分隔的整数 $N, Q$,表示星球数量为 $N$,状态变更次数与查询次数之和为 $Q$。 - 后续 $Q$ 行按时间顺序描述状态变更与查询。其中第 $i$ 行($1 \leq i \leq Q$)包含 $2$ 个或 $3$ 个以空格分隔的整数。记第一个整数为 $T_i$,对应以下情况之一: (i) 当 $T_i = 1$ 时: 该行包含整数 $T_i, A_i, B_i$,表示以下状态变更:将星球 $A_i$ 管理的宇宙飞船设置为前往星球 $B_i$ 的状态。 保证 $1 \leq A_i \leq N$,$1 \leq B_i \leq N$,$A_i \neq B_i$,且此时星球 $A_i$ 管理的宇宙飞船处于闲置状态,且此时普通旅客无法通过多次乘船从星球 $B_i$ 到达星球 $A_i$。 (ii) 当 $T_i = 2$ 时: 该行包含整数 $T_i, A_i$,表示以下状态变更:将星球 $A_i$ 管理的宇宙飞船设置为闲置状态。 保证 $1 \leq A_i \leq N$,且此时星球 $A_i$ 管理的宇宙飞船处于使用状态。 (iii) 当 $T_i = 3$ 时: 该行包含整数 $T_i, A_i, B_i$,表示以下查询:此时若一人位于星球 $A_i$,另一人位于星球 $B_i$,两人能否以普通旅客身份乘宇宙飞船会合?若能,在哪个星球会合所需乘船次数最少? 保证 $1 \leq A_i \leq N$,$1 \leq B_i \leq N$,$A_i \neq B_i$。

输出格式

向标准输出针对每个查询依次输出一行: - 若可以会合,输出使乘船次数最少的会合星球编号; - 若无法会合,输出整数 $-1$。

说明/提示

### 限制 所有输入数据满足以下条件: - $2 \leq N \leq 1\,000\,000$ - $1 \leq Q \leq 1\,000\,000$ ### 子任务 #### 子任务 1 [10 分] 满足以下条件: - $N \leq 5\,000$ - $Q \leq 5\,000$ #### 子任务 2 [30 分] - 满足 $T_i \neq 2$ ($1 \leq i \leq Q$) #### 子任务 3 [60 分] 无额外限制 翻译由 DeepSeek V3 完成