結果
問題 | No.2387 Yokan Factory |
ユーザー |
![]() |
提出日時 | 2023-07-22 07:28:38 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 2,838 ms / 5,000 ms |
コード長 | 1,765 bytes |
コンパイル時間 | 265 ms |
コンパイル使用メモリ | 82,724 KB |
実行使用メモリ | 279,580 KB |
最終ジャッジ日時 | 2024-09-22 07:40:32 |
合計ジャッジ時間 | 26,682 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 35 |
ソースコード
# Nまでの最短距離と大きさという2変数がある# 2変数ある場合はどちらかを固定した方がやりやすいだろう# 大きさを固定すれば、どの辺を使えるかが一意に決まる# それでダイクストラで最短距離がN以下になるかどうか# 大きさで二分探索、大きさで単調のはず# でどうだろうN, M, X = map(int, input().split())edge_list = []for i in range(M):u, v, a, b = map(int, input().split())edge_list.append((u, v, a, b))from heapq import heappush, heappopINF = 10 ** 18def dijkstra(s, n, connect): #(始点, ノード数)distance = [INF] * nque = [(0, s)] #(distance, node)distance[s] = 0confirmed = [False] * n # ノードが確定済みかどうかwhile que:w,v = heappop(que)if distance[v]<w:continueconfirmed[v] = Truefor to, cost in connect[v]: # ノード v に隣接しているノードに対してif confirmed[to] == False and distance[v] + cost < distance[to]:distance[to] = distance[v] + costheappush(que, (distance[to], to))return distancedef check(Y):edges = [[] for i in range(N+1)]for i in range(M):u, v, a, b = edge_list[i]if b >= Y:edges[u].append((v, a))edges[v].append((u, a))d = dijkstra(1, N+1, edges)[N]#print(dijkstra(1, N+1, edges))if d <= X:return 1else:return 0#for y in range(10):# print(y, check(y))OK = 0NG = 10**9+1while (NG-OK)>1:mid = (NG+OK)//2if check(mid) == 1:OK = midelse:NG = midif OK == 0:print(-1)else:print(OK)