TSG LIVE! 16 プログラミングコンテスト
コンテスト日時
2026/05/17 (Su) 10:30 - 12:10

H - Subtree Nearest Light

Flavor
3.5
s
1024
MB
700

問題文

$N$ 頂点からなる木があります。頂点には $1$ から $N$ までの番号が付いています。辺 $i$ ($1 \leq i \leq N-1$)は頂点 $u_i$ と $v_i$ を結んでいます。

この木を頂点 $1$ を根とする根付き木とみなします。各頂点にはランプが $1$ つずつ付いており、はじめ、すべてのランプは消えています。

以下の $Q$ 個の操作を順に処理してください。

  • 1 x
    頂点 $x$ のランプの状態を反転します。すなわち、消えていれば点灯し、点灯していれば消灯します。

  • 2 a b
    頂点 $a$ を根とする部分木に含まれる頂点のうち、ランプが点灯している頂点 $v$ を選びます。
    このときの $\mathrm{dist}(b, v)$ の最小値を出力してください。
    条件を満たす頂点 $v$ が存在しない場合は -1 を出力してください。
    ここで、$\mathrm{dist}(u, v)$ は木上における頂点 $u$ と頂点 $v$ の距離、すなわち $u$ と $v$ を結ぶ単純パス上の辺の本数を表します。

制約

  • $1 \leq N, Q \leq 2 \times 10^5$
  • $1 \leq u_i, v_i \leq N$
  • 与えられるグラフは木である
  • 操作 1 x について、$1 \leq x \leq N$
  • 操作 2 a b について、$1 \leq a, b \leq N$
  • 入力はすべて整数

入力

入力は以下の形式で標準入力から与えられる

$N\ Q$
$u_1\ v_1$
$u_2\ v_2$
$\ \ \ \ \vdots$
$u_{N-1}\ v_{N-1}$
$op_1$
$op_2$
$\ \ \vdots$
$op_Q$

各操作 $op_i$ は、

$1\ x$

又は

$2\ a\ b$

のいずれかの形式で与えられる

出力

操作 2 a b が現れるたびに、その答えを $1$ 行に出力してください。

入力例 1
5 8 1 2 1 3 2 4 2 5 2 2 3 1 4 2 2 3 1 5 2 2 5 2 4 5 1 4 2 4 5
出力例 1
-1 3 0 2 -1

木を頂点 $1$ を根とする根付き木として見ると、頂点 $2$ を根とする部分木には頂点 $2, 4, 5$ が含まれます。
はじめ、すべてのランプは消えています。

  • $1$ 回目の操作 2 2 3 では、頂点 $2$ を根とする部分木に点灯している頂点が存在しないため、-1 を出力します。
  • $2$ 回目の操作 1 4 により、頂点 $4$ のランプが点灯します。
  • $3$ 回目の操作 2 2 3 では、条件を満たす点灯頂点は頂点 $4$ です。$\mathrm{dist}(3,4)=3$ なので、3 を出力します。
  • $4$ 回目の操作 1 5 により、頂点 $5$ のランプも点灯します。
  • $5$ 回目の操作 2 2 5 では、頂点 $5$ 自身が点灯しているため、最小値は $0$ です。
  • $6$ 回目の操作 2 4 5 では、頂点 $4$ を根とする部分木に含まれる点灯頂点は頂点 $4$ のみです。$\mathrm{dist}(5,4)=2$ なので、2 を出力します。
  • $7$ 回目の操作 1 4 により、頂点 $4$ のランプが消灯します。
  • $8$ 回目の操作 2 4 5 では、頂点 $4$ を根とする部分木に点灯している頂点が存在しないため、-1 を出力します。
提出
C++23 (g++ 12.2.0)