結果
| 問題 | No.20 砂漠のオアシス | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2022-10-11 04:09:06 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,312 bytes | 
| コンパイル時間 | 204 ms | 
| コンパイル使用メモリ | 82,048 KB | 
| 実行使用メモリ | 87,620 KB | 
| 最終ジャッジ日時 | 2024-06-25 00:56:08 | 
| 合計ジャッジ時間 | 4,080 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 16 WA * 5 | 
ソースコード
from collections import *
from itertools import *
from functools import *
from heapq import *
import sys,math
input = sys.stdin.readline
N,V,X,Y = map(int,input().split())
L = [list(map(int,input().split())) for _ in range(N)]
M = N**2
e = [[] for _ in range(M)]
def f(i,j):
    
    return N*i+j
H = N
W = N
def nb(x,y):
    tmp = []
    if x+1<H:
        tmp.append((x+1,y))
    if x-1>=0:
        tmp.append((x-1,y))
    if y+1<W:
        tmp.append((x,y+1))
    if y-1>=0:
        tmp.append((x,y-1))
    return tmp
    
X -= 1
Y -= 1
for i in range(N):
    for j in range(N):
        
        x = f(i,j)
        
        for ix,iy in nb(i,j):
            
            e[x].append((f(ix,iy),L[ix][iy]))
            
INF = (1<<30)
def dijkstra(s,e):
    
    N = len(e)
    dist = [INF]*N
    dist[s]=0
    h = []
    heappush(h,(0,s))
    while h:
        nw,v = heappop(h)
        if dist[v]!=nw:
            continue
        for iv,ic in e[v]:
            nc = ic + nw
            if nc < dist[iv]:
                dist[iv] = nc
                heappush(h,(nc,iv))
    return dist
D = dijkstra(0,e)
if D[-1]<=V:
    print('YES')
    exit()
    
oasis = f(X,Y)
if D[oasis]>V:
    print('NO')
    exit()
H = V - D[oasis]
H *=2
D =dijkstra(oasis,e)
if D[-1]<=H:
    print('YES')
else:
    print('NO')
            
            
            
        