結果
問題 |
No.1065 電柱 / Pole (Easy)
|
ユーザー |
|
提出日時 | 2020-08-31 14:22:19 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,007 ms / 2,000 ms |
コード長 | 1,008 bytes |
コンパイル時間 | 363 ms |
コンパイル使用メモリ | 81,920 KB |
実行使用メモリ | 143,032 KB |
最終ジャッジ日時 | 2024-11-15 22:40:56 |
合計ジャッジ時間 | 23,811 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 46 |
ソースコード
from math import sqrt import heapq def dijkstra(s, h, graph): n = len(graph)-1 dist = [float("inf") for i in range(n+1)] dist[s] = 0 pq = [] heapq.heapify(pq) heapq.heappush(pq, (0, s)) while pq: mini_dis, node = heapq.heappop(pq) if dist[node] < mini_dis: continue for w, point in graph[node]: if dist[point] < w: continue newlen = dist[node]+w if newlen < dist[point]: heapq.heappush(pq, (newlen, point)) dist[point] = newlen return dist N,M = map(int,input().split()) X,Y = map(int,input().split()) l = [[] for _ in range(N+1)] d = [[] for _ in range(N+1)] for i in range(1,N+1): a,b = map(int,input().split()) d[i].append(a) d[i].append(b) for _ in range(M): a,b = map(int,input().split()) dist = sqrt((d[a][0]-d[b][0])**2 + (d[a][1]-d[b][1])**2) l[a].append((dist,b)) l[b].append((dist,a)) ans = dijkstra(X, Y, l) print(ans[Y])