Submission #52159603


Source Code Expand

import heapq
INF = pow(10,20)                        # 無限大とする値。距離や頂点数から考えて十分大きい値にすること

H,W = map(int, input().split())
edge = [["#" for _ in range(W+2)]] 
center = [["#"] + list(input()) + ["#"] for i in range(H)]
A = edge + center + edge

medicines = dict()

N = int(input())
for _ in range(N):
    R,C,E = map(int, input().split())
    medicines[(R,C)] = E

# どこかのマスを通り過ぎてから戻ることはない
# → あるマスについて薬があったとき、エネルギーが増えるなら使用する。増えないなら使用しない。
# エネルギーは+でなく、=になる → 戻ってもう一回使うのと等価
# 経路が関係あるのでダイクストラっぽい

# 始点・終点を得る
for i in range(1,H+1):
    for j in range(1,W+1):
        if A[i][j] == "S":
            Si,Sj = i,j
        elif A[i][j] == "T":
            Ti,Tj = i,j

# ダイクストラ法
energy = [[-1 for _ in range(W+2)] for _ in range(H+2)]  # あるマスでの残存エネルギー量最大値
energy[Si][Sj] = 0
hq = [(0,Si,Sj)]    # 優先度付きキューに(残りエネルギー量、始点座標)を追加
heapq.heapify(hq)

while len(hq)!=0:
    e,i,j = heapq.heappop(hq)           # 優先度付きキューから残存エネルギーが多い方から頂点を取り出し
    e *= -1                             # 多い方から取り出しのために-1倍しているので直す

    if i == Ti and j == Tj:
        print("Yes")
        exit()
    
    if energy[i][j] == e:               # (Q(v)←altではなく、更新毎に追加しているので、不要パターンがある。最短の場合のみ処理)
        if (i,j) in medicines:
            # 薬があるなら利用有無を検討
            if e < medicines[(i,j)]:
                e = medicines[(i,j)]
                energy[i][j] = e

        if e > 0:
            for u,v in [(1,0),(-1,0),(0,1),(0,-1)]: # 取り出した頂点から移動できるすべての点に対して
                if energy[i+u][j+v] < e - 1 and A[i+u][j+v] != "#":
                    # 残存エネルギーが増加するなら更新
                    energy[i+u][j+v] = e - 1
                    heapq.heappush(hq,(-1*(e-1),i+u,j+v))    #更新したところの接続点は短くなる可能性があるので再調査

print("No")

Submission Info

Submission Time
Task D - Medicines on Grid
User tonomotohide
Language Python (CPython 3.11.4)
Score 425
Code Size 2459 Byte
Status AC
Exec Time 83 ms
Memory 10900 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 425 / 425
Status
AC × 3
AC × 53
Set Name Test Cases
Sample example0.txt, example1.txt, example2.txt
All example0.txt, example1.txt, example2.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt
Case Name Status Exec Time Memory
example0.txt AC 10 ms 9160 KiB
example1.txt AC 10 ms 8896 KiB
example2.txt AC 10 ms 9092 KiB
test_00.txt AC 37 ms 10180 KiB
test_01.txt AC 21 ms 9776 KiB
test_02.txt AC 18 ms 9748 KiB
test_03.txt AC 54 ms 10424 KiB
test_04.txt AC 23 ms 9808 KiB
test_05.txt AC 24 ms 9820 KiB
test_06.txt AC 37 ms 9940 KiB
test_07.txt AC 36 ms 9992 KiB
test_08.txt AC 56 ms 10288 KiB
test_09.txt AC 16 ms 9648 KiB
test_10.txt AC 44 ms 10472 KiB
test_11.txt AC 77 ms 10900 KiB
test_12.txt AC 49 ms 10140 KiB
test_13.txt AC 18 ms 9800 KiB
test_14.txt AC 16 ms 9756 KiB
test_15.txt AC 29 ms 9972 KiB
test_16.txt AC 25 ms 9824 KiB
test_17.txt AC 53 ms 10044 KiB
test_18.txt AC 66 ms 9776 KiB
test_19.txt AC 28 ms 9980 KiB
test_20.txt AC 17 ms 9816 KiB
test_21.txt AC 73 ms 10448 KiB
test_22.txt AC 50 ms 9836 KiB
test_23.txt AC 34 ms 10024 KiB
test_24.txt AC 28 ms 9836 KiB
test_25.txt AC 79 ms 10556 KiB
test_26.txt AC 83 ms 10592 KiB
test_27.txt AC 29 ms 10052 KiB
test_28.txt AC 21 ms 9716 KiB
test_29.txt AC 44 ms 10224 KiB
test_30.txt AC 65 ms 10532 KiB
test_31.txt AC 33 ms 10080 KiB
test_32.txt AC 17 ms 9720 KiB
test_33.txt AC 16 ms 9640 KiB
test_34.txt AC 16 ms 9712 KiB
test_35.txt AC 17 ms 9720 KiB
test_36.txt AC 17 ms 9588 KiB
test_37.txt AC 52 ms 10620 KiB
test_38.txt AC 54 ms 10600 KiB
test_39.txt AC 54 ms 10484 KiB
test_40.txt AC 55 ms 10496 KiB
test_41.txt AC 54 ms 10604 KiB
test_42.txt AC 53 ms 10640 KiB
test_43.txt AC 54 ms 10472 KiB
test_44.txt AC 52 ms 10560 KiB
test_45.txt AC 55 ms 10572 KiB
test_46.txt AC 55 ms 10540 KiB
test_47.txt AC 52 ms 10552 KiB
test_48.txt AC 53 ms 10560 KiB
test_49.txt AC 10 ms 9216 KiB