結果
問題 | No.3013 ハチマキ買い星人 |
ユーザー |
|
提出日時 | 2025-01-25 13:56:19 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 882 ms / 2,000 ms |
コード長 | 1,964 bytes |
コンパイル時間 | 517 ms |
コンパイル使用メモリ | 81,920 KB |
実行使用メモリ | 126,888 KB |
最終ジャッジ日時 | 2025-01-25 23:03:42 |
合計ジャッジ時間 | 21,517 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge11 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 45 |
ソースコード
# 『重みあり』の無向グラフの最短経路長問題 # # ヒープを用いたダイクストラ法 import heapq N, M, P, Y = map(int, input().split()) G = [[] for _ in range(N + 1)] # 先頭はダミー (頂点 1 ~ 頂点 N) for _ in range(M): u, v, c = map(int, input().split()) G[u].append((v, c)) G[v].append((u, c)) # 始点(頂点1)から各頂点への最小コストを保存する配列 (-1 は未訪問 ) dist = [-1 for _ in range(N + 1)] dist[1] = 0 # ダイクストラ法で使うヒープ Q = [] # 始点となる頂点1をヒープに追加 ( その頂点まで行くのに要する暫定最小コスト, 頂点番号 ) として追加する heapq.heappush(Q, (0, 1)) # ヒープから取り出したことがあるかを保存する配列 done = [False for _ in range(N + 1)] # ダイクストラ法で各頂点への最小コストを求める while Q: cost, from_id = heapq.heappop(Q) # 既にヒープから取り出したことがあればスキップ if done[from_id]: continue done[from_id] = True for to_id, path_cost in G[from_id]: # 探索先が未訪問か, あるいは訪問済みでも最短コストを更新できるなら更新! if dist[to_id] == -1 or dist[to_id] > dist[from_id] + path_cost: dist[to_id] = dist[from_id] + path_cost heapq.heappush(Q, (dist[to_id], to_id)) shopId_cost = {} for _ in range(P): D, E = map(int, input().split()) shopId_cost[D] = E ans = 0 for i in range(1, N + 1): if i in shopId_cost: cost = shopId_cost[i] # ハチマキの値段 if dist[i] != -1: have_money = Y - dist[i] if have_money <= 0: continue tmp_ans = have_money // cost ans = max(ans, tmp_ans) print(ans)