結果
| 問題 |
No.1283 Extra Fee
|
| コンテスト | |
| ユーザー |
neterukun
|
| 提出日時 | 2020-11-06 22:05:00 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,678 ms / 2,000 ms |
| コード長 | 1,501 bytes |
| コンパイル時間 | 1,035 ms |
| コンパイル使用メモリ | 82,056 KB |
| 実行使用メモリ | 116,152 KB |
| 最終ジャッジ日時 | 2024-11-16 06:41:17 |
| 合計ジャッジ時間 | 19,154 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 30 |
ソースコード
import heapq
dd = ((1, 0), (-1, 0), (0, 1), (0, -1))
def dijkstra() -> list:
INF = 10 ** 18
dist = [[[INF] * n for i in range(n)] for i in range(2)]
dist[0][0][0] = 0
q = [(0, 0, 0, 0)] # q = [(startからの距離, i, j, cnt)]
while q:
d, i, j, cnt = heapq.heappop(q)
if dist[cnt][i][j] < d:
continue
for di, dj in dd:
nxt_i, nxt_j = i + di, j + dj
if not(0 <= nxt_i < h and 0 <= nxt_j < w):
continue
if cnt == 1:
if dist[1][i][j] + 1 + cost[nxt_i][nxt_j] < dist[1][nxt_i][nxt_j]:
dist[1][nxt_i][nxt_j] = dist[1][i][j] + 1 + cost[nxt_i][nxt_j]
heapq.heappush(q, (dist[1][nxt_i][nxt_j], nxt_i, nxt_j, 1))
else:
if dist[0][i][j] + 1 + cost[nxt_i][nxt_j] < dist[0][nxt_i][nxt_j]:
dist[0][nxt_i][nxt_j] = dist[0][i][j] + 1 + cost[nxt_i][nxt_j]
heapq.heappush(q, (dist[0][nxt_i][nxt_j], nxt_i, nxt_j, 0))
if dist[0][i][j] + 1 < dist[1][nxt_i][nxt_j]:
dist[1][nxt_i][nxt_j] = dist[0][i][j] + 1
heapq.heappush(q, (dist[1][nxt_i][nxt_j], nxt_i, nxt_j, 1))
return dist
n, m = map(int, input().split())
h, w = n, n
info = [list(map(int, input().split())) for i in range(m)]
cost = [[0] * n for i in range(n)]
for i, j, c in info:
i -= 1
j -= 1
cost[i][j] = c
dist = dijkstra()
print(dist[1][-1][-1])
neterukun