結果
問題 |
No.1069 電柱 / Pole (Hard)
|
ユーザー |
![]() |
提出日時 | 2025-03-31 17:47:29 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,848 bytes |
コンパイル時間 | 367 ms |
コンパイル使用メモリ | 82,436 KB |
実行使用メモリ | 55,240 KB |
最終ジャッジ日時 | 2025-03-31 17:48:44 |
合計ジャッジ時間 | 4,017 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 4 |
other | TLE * 1 -- * 78 |
ソースコード
import math import heapq def main(): import sys input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) M = int(input[ptr+1]) K = int(input[ptr+2]) ptr +=3 X = int(input[ptr])-1 Y = int(input[ptr+1])-1 ptr +=2 coords = [] for _ in range(N): x = int(input[ptr]) y = int(input[ptr+1]) coords.append((x,y)) ptr +=2 edges = [[] for _ in range(N)] edge_list = [] for _ in range(M): u = int(input[ptr])-1 v = int(input[ptr+1])-1 ptr +=2 dx = coords[u][0] - coords[v][0] dy = coords[u][1] - coords[v][1] dist = math.hypot(dx, dy) edges[u].append((v, len(edge_list), dist)) edges[v].append((u, len(edge_list), dist)) edge_list.append((u, v)) heap = [] visited = dict() initial_used = 0 heapq.heappush(heap, (0.0, X, initial_used)) visited[(X, initial_used)] = 0.0 ans = [] while heap and len(ans) < K: current_dist, u, used_mask = heapq.heappop(heap) if u == Y: ans.append(current_dist) if len(ans) >= K: break continue if visited.get((u, used_mask), -1) < current_dist: continue for v, e_idx, dist in edges[u]: if (used_mask & (1 << e_idx)) != 0: continue new_used = used_mask | (1 << e_idx) new_dist = current_dist + dist if (v, new_used) not in visited or new_dist < visited[(v, new_used)]: visited[(v, new_used)] = new_dist heapq.heappush(heap, (new_dist, v, new_used)) for _ in range(K): if _ < len(ans): print("{0:.6f}".format(ans[_])) else: print(-1) print() if __name__ == "__main__": main()