結果
問題 | No.2695 Warp Zone |
ユーザー |
|
提出日時 | 2024-12-29 13:46:27 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 297 ms / 2,000 ms |
コード長 | 1,533 bytes |
コンパイル時間 | 751 ms |
コンパイル使用メモリ | 82,364 KB |
実行使用メモリ | 78,168 KB |
最終ジャッジ日時 | 2024-12-29 13:46:33 |
合計ジャッジ時間 | 5,599 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 24 |
ソースコード
## https://yukicoder.me/problems/no/2695import heapqMAX_INT = 10 ** 18def main():H, W, N = map(int, input().split())warps = []for _ in range(N):a, b, c, d = map(int, input().split())warps.append((a, b, c, d))points = [(1, 1)]for a, b, c, d in warps:points.append((a, b))for a, b, c, d in warps:points.append((c, d))points.append((H, W))# dijkstrafix = [MAX_INT] * (2 * N + 2)seen = [MAX_INT] * (2 * N + 2)queue = []seen[0] = 0heapq.heappush(queue, (0, 0))while len(queue) > 0:cost, v = heapq.heappop(queue)if fix[v] < MAX_INT:continuefix[v] = cost# ワープif 1 <= v <= N:w = v + Nif fix[w] == MAX_INT:h_v, w_v = points[v]h_w, w_w = points[w]new_cost = cost + 1if seen[w] > new_cost:seen[w] = new_costheapq.heappush(queue, (new_cost, w))# 普通の移動for w in range(2 * N + 2):if fix[w] < MAX_INT:continueh_v, w_v = points[v]h_w, w_w = points[w]new_cost = cost + (abs(h_v - h_w) + abs(w_v - w_w))if seen[w] > new_cost:seen[w] = new_costheapq.heappush(queue, (new_cost, w))print(fix[-1])if __name__ == "__main__":main()