結果
問題 |
No.848 なかよし旅行
|
ユーザー |
![]() |
提出日時 | 2025-04-30 09:51:41 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 495 ms / 2,000 ms |
コード長 | 1,104 bytes |
コンパイル時間 | 677 ms |
コンパイル使用メモリ | 82,248 KB |
実行使用メモリ | 112,692 KB |
最終ジャッジ日時 | 2025-04-30 09:51:52 |
合計ジャッジ時間 | 7,166 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 26 |
ソースコード
from heapq import * N, M, P, Q, T = map(int, input().split()) UV = [list(map(int, input().split())) for _ in range(M)] E = [[] for _ in range(N)] P -= 1 Q -= 1 for u, v, c in UV: u -= 1 v -= 1 E[u].append((v, c)) E[v].append((u, c)) INF = 10 ** 13 # N * maxコストくらいで設定 # 普通のダイクストラ def dijkstra(x): D = [INF] * N D[x] = 0 q = [(0, x)] while q: d, u = heappop(q) # 下のifでTLE解消することがある if d > D[u]: continue for i in E[u]: a, b = i if D[a] > D[u] + b: D[a] = D[u] + b heappush(q, (D[a], a)) return D D0 = dijkstra(0) DP = dijkstra(P) DQ = dijkstra(Q) d0p = D0[P] d0q = D0[Q] dpq = DP[Q] if d0p + d0q + dpq <= T: print(T) exit() ans = -1 for x in range(N): d0x = D0[x] dxp = DP[x] dxq = DQ[x] for y in range(x, N): d0y = D0[y] dyp = DP[y] dyq = DQ[y] mdi = max(dxp + dyp, dxq + dyq) if d0x + d0y + mdi <= T: ans = max(ans, T - mdi) print(ans)