Deloitte | COGNIZANT | IBM | CAPGEMINI
import heapq
from collections import defaultdict
def solve(n, m, k, treasures, bridges, queries):
graph = defaultdict(list)
for u, v, w in bridges:
graph[u - 1].append((v - 1, w))
results = []
for start, end in queries:
start -= 1
end -= 1
pq = [(-treasures[start], 0, start)]
visited = {}
while pq:
neg_tres, time, node = heapq.heappop(pq)
total_treasure = -neg_tres
if node == end:
results.append((total_treasure, time))
break
if node in visited and visited[node] >= total_treasure:
continue
visited[node] = total_treasure
for nei, wt in graph[node]:
if nei not in visited or visited[nei] < total_treasure + treasures[nei]:
heapq.heappush(pq, (-(total_treasure + treasures[nei]), time + wt, nei))
return results
n, m, k = map(int, input().split())
treasures = list(map(int, input().split()))
bridges = [tuple(map(int, input().split())) for _ in range(m)]
queries = [tuple(map(int, input().split())) for _ in range(k)]
result = solve(n, m, k, treasures, bridges, queries)
for treasure, time in result:
print(treasure, time)
q3
//quantiphi ✅
1.8K ·