結果
| 問題 |
No.1069 電柱 / Pole (Hard)
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 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()
lam6er