Submission #482550

#TimeUsernameProblemLanguageResultExecution timeMemory
482550beaconmcJakarta Skyscrapers (APIO15_skyscraper)Pypy 3
57 / 100
732 ms262148 KiB
import io, os
from math import *
from heapq import *
input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline

n, m = map(int, input().split())

edges = [[] for i in range(n)]
sussy = [[] for i in range(n)]
stuff = set()
count = 0
for i in range(m):
    a,b = map(int, input().split())
    if count == 1:
        baka = a
    if count == 0:
        imposter = a
    #sussy[a].append(b)
    stuff.add((a,b))
    count += 1

for i in stuff:
    sus = i[0]
    count = 0
    while (sus+i[1])<n:
        sus+=i[1]
        count += 1
        edges[i[0]].append((sus, count))
    sus = i[0]
    count = 0
    while (sus-i[1])>=0:
        sus -= i[1]
        count += 1
        edges[i[0]].append((sus, count))
        
        
            
def djk(src):
    dist = [inf for i in range(n)]
    dist[src] = 0
    q = []
    heapify(q)
    heappush(q, (dist[src], src))
    while len(q):
        node = heappop(q)
        if dist[node[1]] != node[0]:
            continue
        
        for i in edges[node[1]]:
            if dist[i[0]] > node[0] + i[1]:
                dist[i[0]] = node[0] + i[1]
                heappush(q, (node[0]+i[1], i[0]))
    return dist
susz = djk(imposter)[baka]
print(-1 if susz == inf else susz)

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...