Developing Cities

2 secs 1024 MB
viral's icon viral

注意

本問題は Python での AC 自体は確認していますが、 Python は PyPy の使用を推奨します。
また、入力の量が多くなる場合があるので、高速な方法で入力を行うことを推奨します。

問題文

NN 個の街と MM 個の道路が存在します。街にはそれぞれ街 11 、街 22\dots 、街 NN と名前が割り当てられており、 それぞれの道路も同様に 11 から MM まで番号が割り当てられており、 ii 番目の道路は街 AiA_i から 街 BiB_i へのみ移動できる距離 CiC_i の一方通行の道路です。街 BiB_i から街 AiA_i へは移動できないことに注意してください。

今、 QQ 個のクエリが渡されます。各クエリは以下の 22 種類です。

  • クエリ 11 :街 DD から街 EE へのみ移動できる距離 FF の一方通行の道路を新設する
  • クエリ 22 :街 XX から街 YY への最短距離を求め、出力する( たどり着けない場合は -1

全てのクエリを順番に処理してください。

制約

  • 2N502 \le N \le 50
  • 1M5×1051 \le M \le 5 \times 10^5
  • 1Ai,Bi,D,E,X,YN1 \le A_i,B_i,D,E,X,Y \le N
  • 1Ci,F5×1061 \le C_i,F \le 5 \times 10^6
  • 1Q5×1031 \le Q \le 5 \times 10^3
  • 入力は全て整数

入力

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

NN MM
A1  B1  C1A_1\;B_1\;C_1
\vdots
AM  BM  CMA_M\;B_M\;C_M
QQ
query1\mathrm{query}_1
\vdots
queryQ\mathrm{query}_Q

各クエリは以下の形式で与えられる。

クエリ1

1  D  E  F1\;D\;E\;F

クエリ2

2  X  Y2\;X\;Y

出力

クエリ 22 の答えを出力してください。

入出力例1

入力
5 6
1 2 7
1 3 2
1 4 5
3 5 6
4 5 1
5 2 10
5
2 1 2
2 1 5
1 1 5 2
2 1 2
2 1 5
出力
7
6
7
2

最初、街 11 から街 22 へは道路 11 、街 11 から街 55 へは道路 33 と道路 55 を使うのが最短です。
33 番目のクエリでは、街 11 から街 55 へ距離 22 の道路が新設されるので、街 11 から街 55 へはこの道路を使った方が距離は短くなります。

提出


Go (1.21)