筑波大学プログラミングコンテスト2023
コンテスト日時
2023/09/03 (Su) 14:00 - 17:00

H - Chase

Flavor
4
s
1024
MB
700

問題文

$N$ 頂点の木が与えられます。
木の頂点には $1$ から $N$ までの番号がつけられています。また、 $i$ 番目の辺は頂点 $u_i$ と頂点 $v_i$ を双方向に結んでおり、長さは $D_i$ です。
この木の上には人が $N$ 人暮らしており、最初、各頂点 $i$ に人 $i$ が立っています。

これから $T$ 日の間、次のような移動が発生します。

  • $i$ 日目には、人 $P_i$ が人 $Q_i$ に向かって、最短距離で $V_i$ だけ移動する。

各移動後の人 $P_i$ の位置を出力形式に従って出力してください。
頂点の上ではなく辺の途中で移動を終える可能性があることに注意してください。

与えられるテストケースについて、 $i$ 日目の移動前の状態で人 $P_i$ と人 $Q_i$ の間の距離は $V_i$ 以上であることが保証されています。

部分点

  1. ($300$ 点) $D_i = 1$
  2. ($400$ 点) 追加の制約なし

制約

  • $1 \leq N \leq 5 \times 10^4$
  • $1 \leq u_i \lt v_i \leq N$
  • $1 \leq D_i \leq 10^9$
  • $1 \leq T \leq 5 \times 10^4$
  • $1 \leq P_i, Q_i \leq N$
  • $1 \leq V_i \leq 10^9$
  • $P_i \neq Q_i$
  • 入力はすべて整数である
  • 与えられるグラフは木である
  • $i$ 日目の移動前の状態で、人 $P_i$ と人 $Q_i$ の間の距離は $V_i$ 以上である

入力

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

$N$
$u_1$ $v_1$ $D_1$
$u_2$ $v_2$ $D_2$
$\vdots$
$u_{N-1}$ $v_{N-1}$ $D_{N-1}$
$T$
$P_1$ $Q_1$ $V_1$
$P_2$ $Q_2$ $V_2$
$\vdots$
$P_T$ $Q_T$ $V_T$

出力

$T$ 行出力せよ。$i$ 行目には、 $i$ 日目の移動後の人 $P_i$ の位置を出力せよ。

人 $P_i$ が頂点 $x$ の上にいる場合は 1 x を、
$y$ 番目の辺の途中にいる場合は、人 $P_i$ の位置から頂点 $u_y$ までの距離を $d$ として、 2 y d を出力せよ。

入力例 1
6 1 2 1 1 5 1 2 3 1 2 4 1 4 6 1 3 5 2 1 3 6 3 5 3 2
出力例 1
1 1 1 6 1 4

この入力は部分点の制約を満たす。

入力例 2
9 1 4 10 2 7 4 1 8 20 1 9 14 6 8 20 3 5 2 1 2 2 2 5 4 4 9 3 15 6 4 20 2 6 20 1 2 5
出力例 2
2 7 1 1 8 2 3 18 2 3 5
提出
C++23 (g++ 12.2.0)