結果
問題 |
No.1301 Strange Graph Shortest Path
|
ユーザー |
![]() |
提出日時 | 2025-03-31 17:58:36 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,510 bytes |
コンパイル時間 | 378 ms |
コンパイル使用メモリ | 82,676 KB |
実行使用メモリ | 137,692 KB |
最終ジャッジ日時 | 2025-03-31 17:59:40 |
合計ジャッジ時間 | 29,629 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 28 WA * 5 |
ソースコード
import sys import heapq def dijkstra(n, adj, start): dist = [float('inf')] * (n + 1) dist[start] = 0 heap = [] heapq.heappush(heap, (0, start)) visited = [False] * (n + 1) while heap: current_dist, u = heapq.heappop(heap) if visited[u]: continue visited[u] = True for v, cost in adj[u]: if dist[v] > current_dist + cost: dist[v] = current_dist + cost heapq.heappush(heap, (dist[v], v)) return dist def main(): n, m = map(int, sys.stdin.readline().split()) edges = [] adj_forward = [[] for _ in range(n + 1)] for _ in range(m): u, v, c, d = map(int, sys.stdin.readline().split()) edges.append((u, v, c, d)) adj_forward[u].append((v, c)) adj_forward[v].append((u, c)) d1 = dijkstra(n, adj_forward, 1) dn = dijkstra(n, adj_forward, n) s_dist = d1[n] adj_return = [[] for _ in range(n + 1)] for u, v, c, d in edges: # Check if this edge is part of any shortest path from 1 to N part_of_shortest = False if d1[u] + c + dn[v] == s_dist: part_of_shortest = True if d1[v] + c + dn[u] == s_dist: part_of_shortest = True cost = d if part_of_shortest else c adj_return[u].append((v, cost)) adj_return[v].append((u, cost)) return_dist = dijkstra(n, adj_return, n) print(s_dist + return_dist[1]) if __name__ == "__main__": main()