結果
問題 |
No.1069 電柱 / Pole (Hard)
|
ユーザー |
![]() |
提出日時 | 2025-06-12 21:38:02 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,852 bytes |
コンパイル時間 | 160 ms |
コンパイル使用メモリ | 82,520 KB |
実行使用メモリ | 411,400 KB |
最終ジャッジ日時 | 2025-06-12 21:41:27 |
合計ジャッジ時間 | 4,121 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | TLE * 1 -- * 78 |
ソースコード
import heapq def main(): import sys input = sys.stdin.read data = input().split() idx = 0 n = int(data[idx]) idx +=1 m = int(data[idx]) idx +=1 K = int(data[idx]) idx +=1 X = int(data[idx])-1 idx +=1 Y = int(data[idx])-1 idx +=1 poles = [] for _ in range(n): x = int(data[idx]) y = int(data[idx+1]) poles.append( (x, y) ) idx +=2 edges = [[] for _ in range(n)] for _ in range(m): u = int(data[idx])-1 idx +=1 v = int(data[idx])-1 idx +=1 dx = poles[u][0] - poles[v][0] dy = poles[u][1] - poles[v][1] dist = (dx**2 + dy**2)**0.5 edges[u].append( (v, dist) ) edges[v].append( (u, dist) ) heap = [] initial_visited = frozenset([X]) heapq.heappush(heap, (0.0, X, initial_visited)) best = {} key = (X, initial_visited) best[key] = 0.0 results = [] while heap and len(results) < K: dist, u, visited = heapq.heappop(heap) if u == Y: results.append(dist) if len(results) == K: break continue if (u, visited) in best and best[(u, visited)] < dist: continue for v, w in edges[u]: if v not in visited: new_visited = frozenset(visited | {v}) new_dist = dist + w key = (v, new_visited) if key not in best or new_dist < best.get(key, float('inf')): best[key] = new_dist heapq.heappush(heap, (new_dist, v, new_visited)) for res in results[:K]: print("{0:.6f}".format(res)) for _ in range(K - len(results)): print(-1) if __name__ == '__main__': main()