TUATPC2024Summer (Algorithm)
コンテスト日時
2024/09/26 (Th) 20:00 - 23:00

G - Let's Meet by the Promised Time

Ceylon
2.5
s
1024
MB
250

問題文

Alice と Bob の住む国には $N$ 個の駅があり、$2$ つの駅を結ぶ $M$ 本の路線があります。それぞれの駅には番号 $1, 2, \dots, N$ が、それぞれの路線には番号 $1, 2, \dots, M$ が付けられており、路線 $i$ は駅 $A_i$ と駅 $B_i$ の間を双方向に結び、$C_i$ の時間で移動することができます。ここで、どの駅も $1$ 本以上の路線を用いて互いに行き来することが可能であることが保証されます。

Alice は駅 $1$ の近くに、Bob は駅 $N$ の近くにそれぞれ住んでいます。ある日、$2$ 人は駅の近くで待ち合わせをすることにしました。

ただし、この国は通信技術が発達しておらず、逐一互いの居場所を連絡することができないため、 $2$ 人は時刻 $0$ に最寄駅を同時に出発し、路線のみを用いて駅間を移動して時刻 $K$ までにどこかの駅で会うことを予め決めました。

ここで、各駅での滞在時間や乗り換えにかかる時間、および路線の待ち時間は考慮しないものとします。

$2$ 人が時刻 $K$ までに会うことができる駅は何個あるか求めてください。$Q$ 個の整数 $K_1, K_2, \dots, K_Q$ が与えられるので、$K = K_1, K_2, \dots, K_Q$ についてそれぞれ答えてください。

制約

Hard (125点)

  • $2 \le N \le 10^5$
  • $N - 1 \le M \le 2 \times 10^5$
  • $1 \le A_i \lt B_i \le N$
  • $i \ne j$ ならば $(A_i, B_i) \ne (A_j, B_j)$
  • $1 \le C_i \le 10^5$
  • どの駅も $1$ 本以上の路線を通って互いに行き来することが可能
  • $1 \le Q \le 10^5$
  • $0 \le K_i \le 10^9$
  • 入力はすべて整数

Normal (50点)

  • Hard の制約に以下の制約を追加
  • $M = N - 1$
  • $1 \le Q \le 100$

Easy (75点)

  • Hard の制約に以下の制約を追加
  • $3 \le N \le 100$
  • $M = N - 1$
  • $1 \le i \le M$ について $A_i = 2$ または $B_i = 2$
  • $1 \le Q \le 100$
部分点のみ解答したい場合

部分点のみを解答したい場合、問題によっては結果が TLE となるケースが大量に発生し、ジャッジに時間がかかる可能性があります。

C++の assert 関数やPythonの assert 文などを用いて、変数の値によってプログラムを強制終了させる処理を書き加えることで TLE を防ぎ、より早く結果を得ることができます。

入力

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

$N \ \ M$
$A_1 \ \ B_1 \ \ C_1$
$\ \vdots$
$A_M \ \ B_M \ \ C_M$
$Q$
$K_1 \ \ \dots \ \ K_Q$

出力

$Q$ 行出力してください。$i$ 行目には $K = K_i$ のときの答えを出力してください。

入力例 1
6 5 1 2 2 2 3 7 2 4 1 2 5 8 2 6 2 3 4 10 1
出力例 1
4 6 0

駅と路線の関係は次のようになっています。
$2$ つの駅を結ぶ線が路線を表しており、線の近くに書かれた数字がその路線を使って $2$ つの駅間を移動するために必要な時間を表しています。

$K = K_1 = 4$ のときを考えます。

  • Alice は時刻 $4$ までに駅 $1, 2, 4, 6$ に行くことができます。
  • Bob は時刻 $4$ までに駅 $1, 2, 4, 6$ に行くことができます。

よって、$2$ 人は駅 $1, 2, 4, 6$ に待ち合わせをすることができます。
Alice が近くに住んでいる駅 $1$ や Bob が近くに住んでいる駅 $6$ を待ち合わせ場所として選んでも構わないことに注意してください。

この入力例は Easy・Normal・Hard の制約を満たします。
特に、Easy ではすべての路線が駅 $2$ と繋がっています。

入力例 2
8 7 1 3 5 2 3 4 3 4 4 4 7 8 5 6 3 6 8 7 7 8 7 3 15 20 25
出力例 2
1 3 6

駅と路線の関係は次のようになっています。

この入力例は Normal・Hard の制約を満たします。

入力例 3
8 12 1 3 5 1 5 8 2 3 4 2 4 3 3 4 4 3 6 5 4 6 4 4 7 8 5 6 3 5 7 9 6 8 7 7 8 7 5 8 11 13 15 16
出力例 3
0 3 4 5 5

駅と路線の関係は次のようになっています。

この入力例は Hard の制約を満たします。

提出
C++23 (g++ 12.2.0)