結果
| 問題 |
No.1065 電柱 / Pole (Easy)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-01-27 18:24:52 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,568 ms / 2,000 ms |
| コード長 | 1,281 bytes |
| コンパイル時間 | 218 ms |
| コンパイル使用メモリ | 82,048 KB |
| 実行使用メモリ | 194,500 KB |
| 最終ジャッジ日時 | 2024-06-28 03:42:15 |
| 合計ジャッジ時間 | 35,662 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 46 |
ソースコード
from heapq import heappop, heappush
from math import inf, sqrt
from operator import ne
class Point:
def __init__(self, x, y) -> None:
self.x = x
self.y = y
def distance_to(self, __o: object):
if not isinstance(__o, Point):
raise ValueError
return sqrt((self.x - __o.x)**2 + (self.y - __o.y)**2)
def main():
N, M = map(int, input().split())
X, Y = map(int, input().split())
X -= 1
Y -= 1
nodes = [Point(*map(int, input().split())) for _ in range(N)]
weights = [{} for _ in range(N)]
for _ in range(M):
start, end = map(int, input().split())
weights[start-1][end-1] = nodes[start-1].distance_to(nodes[end-1])
weights[end-1][start-1] = weights[start-1][end-1]
searched = []
heappush(searched, (0, X))
costs = [inf for _ in range(N)]
decided = set()
while searched:
current_cost, next_node_idx = heappop(searched)
if next_node_idx in decided:
continue
costs[next_node_idx] = current_cost
decided.add(next_node_idx)
for dest_idx, distance in weights[next_node_idx].items():
heappush(searched, (current_cost + distance, dest_idx))
print(costs[Y])
if __name__ == "__main__":
main()