結果
問題 | No.2354 Poor Sight in Winter |
ユーザー |
![]() |
提出日時 | 2023-06-18 17:55:13 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 492 ms / 2,000 ms |
コード長 | 1,903 bytes |
コンパイル時間 | 1,647 ms |
コンパイル使用メモリ | 81,792 KB |
実行使用メモリ | 87,204 KB |
最終ジャッジ日時 | 2024-06-26 07:08:45 |
合計ジャッジ時間 | 7,905 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 26 |
ソースコード
# BFS, ダイクストラのどちらかか、ワーシャルフロイドはないだろう# ダイクストラでやってみるか# Pによって各辺コストが変わる、(マンハッタン距離+2P-1)//2P# それでK+1歩まででゴールにたどり着けるか# を二分探索# BFSだと盤面のマス目を距離で埋める必要あるが盤面がない# 二分探索の都合上下限を0にできないと思ったけどできそうN, K = map(int, input().split())Sx, Sy, Gx, Gy = map(int, input().split())XY = [(Sx, Sy, 0)]for i in range(N):x, y = map(int, input().split())XY.append((x, y, i+1))XY.append((Gx, Gy, N+1))edges = [[] for i in range(N+2)]for i in range(N+2):for j in range(i+1, N+2):cost = abs(XY[i][0]-XY[j][0])+abs(XY[i][1]-XY[j][1])edges[i].append((j, cost))edges[j].append((i, cost))# ダイクストラの辺コストをPで改造したバージョンfrom heapq import heappush, heappopINF = 10 ** 18def dijkstra(s, n, connect, P): #(始点, ノード数)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 に隣接しているノードに対してcost = (cost+P-1)//P-1if confirmed[to] == False and distance[v] + cost < distance[to]:distance[to] = distance[v] + costheappush(que, (distance[to], to))return distance#distance = dijkstra(0, N+2, edges, 4)# 第2は頂点数、ゴールではないNG = 0OK = 10**8while (OK-NG)>1:mid = (OK+NG)//2if dijkstra(0, N+2, edges, mid)[N+1] <= K:OK = midelse:NG = midprint(OK)