結果
問題 |
No.807 umg tours
|
ユーザー |
![]() |
提出日時 | 2025-04-09 21:02:55 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,139 bytes |
コンパイル時間 | 255 ms |
コンパイル使用メモリ | 82,704 KB |
実行使用メモリ | 155,008 KB |
最終ジャッジ日時 | 2025-04-09 21:05:24 |
合計ジャッジ時間 | 12,867 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 8 WA * 18 |
ソースコード
import sys import heapq def main(): input = sys.stdin.read data = input().split() idx = 0 N, M = int(data[idx]), int(data[idx+1]) idx += 2 edges = [[] for _ in range(N+1)] for _ in range(M): a = int(data[idx]) b = int(data[idx+1]) c = int(data[idx+2]) idx += 3 edges[a].append((b, c)) edges[b].append((a, c)) # Dijkstra to find d1 and parent/max_e INF = 1 << 60 d1 = [INF] * (N+1) max_e = [0] * (N+1) parent = [-1] * (N+1) visited = [False] * (N+1) heap = [] d1[1] = 0 heapq.heappush(heap, (0, 1, -1, 0)) # (distance, node, parent, max_edge) while heap: dist, u, p, me = heapq.heappop(heap) if visited[u]: continue visited[u] = True parent[u] = p max_e[u] = me for v, c in edges[u]: if not visited[v] and d1[v] > dist + c: d1[v] = dist + c new_me = max(me, c) heapq.heappush(heap, (d1[v], v, u, new_me)) elif not visited[v] and d1[v] == dist + c: new_me = max(me, c) if new_me < max_e[v]: # ensure the maximum edge is tracked max_e[v] = new_me parent[v] = u minimal_s = [INF] * (N+1) for _ in range(M): a = int(data[idx-3*M+3*_]) b = int(data[idx-3*M+3*_+1]) c_val = int(data[idx-3*M+3*_+2]) u = a v = b s = d1[u] + d1[v] # Process u current = u while current != -1: if minimal_s[current] <= s: break minimal_s[current] = s current = parent[current] # Process v current = v while current != -1: if minimal_s[current] <= s: break minimal_s[current] = s current = parent[current] for i in range(1, N+1): default = 2 * d1[i] - max_e[i] res = min(default, minimal_s[i] if minimal_s[i] != INF else default) print(res) if __name__ == "__main__": main()