結果
| 問題 |
No.2640 traO Stamps
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-02-12 03:33:09 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,277 bytes |
| コンパイル時間 | 351 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 27,040 KB |
| 最終ジャッジ日時 | 2024-09-28 17:49:29 |
| 合計ジャッジ時間 | 4,738 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 3 WA * 1 RE * 1 TLE * 1 -- * 27 |
ソースコード
import math
N, M, K = map(int, input().split())
S = list(map(int, input().split()))
dist = [[10**18] * N for _ in range(N)]
for i in range(N):
dist[i][i] = 0
for _ in range(M):
u, v, w = map(int, input().split())
dist[u - 1][v - 1] = w
dist[v - 1][u - 1] = w
for k in range(N):
for i in range(N):
for j in range(N):
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
P = int(math.sqrt(K))
baby = [0] * K
giant = [0] * ((K + P - 1) // P)
for i in range(K):
baby[i] = dist[S[i] - 1][S[i + 1] - 1]
giant[i // P] += baby[i]
Q = int(input())
for _ in range(Q):
T, X, Y = map(int, input().split())
if T == 1:
S[X] = Y
if X > 0:
giant[(X - 1) // P] -= baby[X - 1]
baby[X - 1] = dist[S[X - 1] - 1][S[X] - 1]
giant[(X - 1) // P] += baby[X - 1]
if X < K:
giant[X // P] -= baby[X]
baby[X] = dist[S[X] - 1][S[X + 1] - 1]
giant[X // P] += baby[X]
else:
ans = 0
x = (X + P - 1) // P
y = Y // P
for i in range(x, y):
ans += giant[i]
for i in range(X, x * P):
ans += baby[i]
for i in range(y * P, Y):
ans += baby[i]
print(ans)