結果
問題 | No.807 umg tours |
ユーザー |
![]() |
提出日時 | 2025-06-12 17:00:41 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 2,807 ms / 4,000 ms |
コード長 | 1,399 bytes |
コンパイル時間 | 380 ms |
コンパイル使用メモリ | 82,560 KB |
実行使用メモリ | 183,084 KB |
最終ジャッジ日時 | 2025-06-12 17:01:10 |
合計ジャッジ時間 | 28,734 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 26 |
ソースコード
import sys import heapq def main(): input = sys.stdin.read data = input().split() idx = 0 N = int(data[idx]) idx += 1 M = int(data[idx]) idx += 1 adj = [[] for _ in range(N+1)] for _ in range(M): a = int(data[idx]) idx += 1 b = int(data[idx]) idx += 1 c = int(data[idx]) idx += 1 adj[a].append((b, c)) adj[b].append((a, c)) INF = float('inf') dist = [[INF] * 2 for _ in range(N+1)] dist[1][0] = 0 heap = [] heapq.heappush(heap, (0, 1, 0)) while heap: d, u, s = heapq.heappop(heap) if d > dist[u][s]: continue for v, c in adj[u]: if s == 0: if dist[v][0] > d + c: dist[v][0] = d + c heapq.heappush(heap, (dist[v][0], v, 0)) if dist[v][1] > d: dist[v][1] = d heapq.heappush(heap, (dist[v][1], v, 1)) else: if dist[v][1] > d + c: dist[v][1] = d + c heapq.heappush(heap, (dist[v][1], v, 1)) for i in range(1, N+1): if i == 1: print(0) continue d0 = dist[i][0] d1 = dist[i][1] min_dist = min(2 * d0, d0 + d1) print(min_dist) if __name__ == "__main__": main()