P12562 [UTS 2024] Two Trees

题目描述

给定两棵相同的无向树 $G$ 和 $H$,每棵树包含 $n$ 个顶点。两棵树被称为相同,当且仅当对于所有顶点对 $(u,v)$,$G$ 中存在边 $(G_u,G_v)$ 当且仅当 $H$ 中存在边 $(H_u,H_v)$。 某些顶点可以通过无向边连接到另一棵树中的对应顶点。特别地,叶子顶点 $G_v$ 可以直接连接到顶点 $H_v$。如果叶子顶点 $G_v$ 直接连接到 $H_v$,则称顶点 $v$ 为**启用**状态,否则为**禁用**状态。 初始时,所有叶子顶点均为**禁用**状态。需要处理以下两种查询: 1. $1$ $v$ —— 切换顶点 $v$ 的状态(若当前为禁用则改为启用,反之亦然); 2. $2$ $u$ $v$ —— 输出从顶点 $G_u$ 到顶点 $H_v$ 的最短路径长度。

输入格式

第一行包含两个整数 $n$ 和 $q$ ($3 \le n \le 2 \cdot 10^5$; $1 \le q \le 2 \cdot 10^5$) —— 分别表示顶点数和查询数。 接下来 $n-1$ 行,每行包含两个整数 $u$, $v$ $(1 \le u,v \le n)$ —— 描述树的边 $(G_u,G_v)$ 和 $(H_u,H_v)$。 接下来 $q$ 行,每行描述一个查询。查询有两种形式: - $1$ $v$ $(1 \le v \le n)$ —— 切换顶点 $v$ 的状态; - $2$ $u$ $v$ $(1 \le u,v \le n)$ —— 查询从 $G_u$ 到 $H_v$ 的最短路径长度。

输出格式

对于每个第二类查询,输出一个整数表示最短路径长度。若路径不存在,输出 $\texttt{-1}$。

说明/提示

设 $k$ 为第二类查询的数量。 - ($3$ 分):$n \le 16$,$q \le 16$; - ($3$ 分):$n \le 16$,$q \le 2 \cdot 10^5$; - ($2$ 分):$n \le 2000$,$q \le 2 \cdot 10^5$,$k \le 5$; - ($8$ 分):$n \le 2000$,$q \le 2000$; - ($9$ 分):$n \le 2 \cdot 10^5$,$q \le 2 \cdot 10^5$,$k \le 5$; - ($30$ 分):$n \le 2 \cdot 10^5$,$q \le 2 \cdot 10^5$,且第二类查询后不会出现第一类查询; - ($45$ 分):无额外限制。 翻译由 DeepSeek V3 完成