結果
問題 |
No.807 umg tours
|
ユーザー |
|
提出日時 | 2021-06-15 12:01:54 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 3,121 ms / 4,000 ms |
コード長 | 921 bytes |
コンパイル時間 | 201 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 179,956 KB |
最終ジャッジ日時 | 2024-12-26 08:29:26 |
合計ジャッジ時間 | 30,305 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 26 |
ソースコード
import sys from typing import Union input=sys.stdin.readline n,m=map(int,input().split()) abc=[list(map(int,input().split())) for _ in range(m)] g=[[] for _ in range(n)] for a,b,c in abc: a,b=a-1,b-1 g[a].append([b,c]) g[b].append([a,c]) """ ダイクストラ seen[v]:0にできる権利を使っていない場合のvまでの最短距離 seen[v+n]:0にできる権利を使った場合のvまでの最短距離 """ inf=10**18 seen=[inf]*(2*n) seen[0]=0 seen[0+n]=0 todo=[[0,0]] from heapq import heappop,heappush while todo: d,v=heappop(todo) if seen[v]<d:continue for nv,nd in g[v%n]: if v<n: if seen[nv]>seen[v]+nd: seen[nv]=seen[v]+nd heappush(todo,[seen[nv],nv]) if seen[nv+n]>seen[v]: seen[nv+n]=seen[v] heappush(todo,[seen[nv+n],nv+n]) else: if seen[nv+n]>seen[v]+nd: seen[nv+n]=seen[v]+nd heappush(todo,[seen[nv+n],nv+n]) for v in range(n): print(seen[v]+seen[v+n])