結果
| 問題 |
No.160 最短経路のうち辞書順最小
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-09-28 17:40:39 |
| 言語 | Python2 (2.7.18) |
| 結果 |
AC
|
| 実行時間 | 2,136 ms / 5,000 ms |
| コード長 | 851 bytes |
| コンパイル時間 | 73 ms |
| コンパイル使用メモリ | 6,912 KB |
| 実行使用メモリ | 12,160 KB |
| 最終ジャッジ日時 | 2024-11-21 08:11:11 |
| 合計ジャッジ時間 | 3,948 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 26 |
ソースコード
import heapq
N, M, S, G = map(int, raw_input().split())
rinsetsu = [[] for i in xrange(N)]
for _ in xrange(M):
a, b, c = map(int, raw_input().split())
rinsetsu[a].append((b, c))
rinsetsu[b].append((a, c))
def dijkstra():
dist = [(float('inf'), []) for i in xrange(N)]
dist[S] = (0, [S])
q = []
for n, c in rinsetsu[S]:
heapq.heappush(q, (c, n))
dist[n] = (c, [S, n])
while len(q) != 0:
c, n = heapq.heappop(q)
if c > dist[n][0]:
continue
for nn, nc in rinsetsu[n]:
alt = dist[n][0] + nc
if dist[nn][0] > alt or (dist[nn][0] == alt and dist[n][1]+[nn] < dist[nn][1]):
dist[nn] = (alt, dist[n][1]+[nn])
heapq.heappush(q, (alt, nn))
return dist
print ' '.join(map(str, dijkstra()[G][1]))