import heapq
def solve():
T = int(input()) # Liczba zestawów nagłaśniających
for _ in range(T):
n, m = map(int, input().split()) # Liczba ruterów i wzmacniaczy
p = list(map(int, input().split())) # Przepustowości ruterów
adj = [[] for _ in range(n)] # Macierz sąsiedztwa (graf)
# Wczytanie wzmacniaczy
for _ in range(m):
a, b, w = map(int, input().split())
a -= 1 # Przesuwamy indeksy do 0
b -= 1
adj[a].append((b, w))
adj[b].append((a, w)) # Wzmacniacze są dwukierunkowe
# Algorytm dijkstra do znajdowania maksymalnej mocy sygnału
max_power = [0] * n # Przechowuje maksymalną moc sygnału dla każdego rutera
max_power[0] = 1 # Moc sygnału z mikrofonu (początkowo 1 na ruterze 1)
# Stos używany do implementacji Dijkstry (używamy max-heap, dlatego musimy negować wartości)
heap = [(-1, 0)] # (moc, indeks rutera)
while heap:
power, node = heapq.heappop(heap)
power = -power # Przekształcamy z powrotem do pozytywnej mocy
if power < max_power[node]:
continue
for neighbor, gain in adj[node]:
new_power = power * gain
if new_power <= p[neighbor] and new_power > max_power[neighbor]:
max_power[neighbor] = new_power
heapq.heappush(heap, (-new_power, neighbor))
# Wynik dla tego zestawu nagłaśniającego
if max_power[n-1] == 0:
print(-1)
else:
print(max_power[n-1])
# Wywołanie funkcji głównej
if __name__ == "__main__":
solve()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import heapq def solve(): T = int(input()) # Liczba zestawów nagłaśniających for _ in range(T): n, m = map(int, input().split()) # Liczba ruterów i wzmacniaczy p = list(map(int, input().split())) # Przepustowości ruterów adj = [[] for _ in range(n)] # Macierz sąsiedztwa (graf) # Wczytanie wzmacniaczy for _ in range(m): a, b, w = map(int, input().split()) a -= 1 # Przesuwamy indeksy do 0 b -= 1 adj[a].append((b, w)) adj[b].append((a, w)) # Wzmacniacze są dwukierunkowe # Algorytm dijkstra do znajdowania maksymalnej mocy sygnału max_power = [0] * n # Przechowuje maksymalną moc sygnału dla każdego rutera max_power[0] = 1 # Moc sygnału z mikrofonu (początkowo 1 na ruterze 1) # Stos używany do implementacji Dijkstry (używamy max-heap, dlatego musimy negować wartości) heap = [(-1, 0)] # (moc, indeks rutera) while heap: power, node = heapq.heappop(heap) power = -power # Przekształcamy z powrotem do pozytywnej mocy if power < max_power[node]: continue for neighbor, gain in adj[node]: new_power = power * gain if new_power <= p[neighbor] and new_power > max_power[neighbor]: max_power[neighbor] = new_power heapq.heappush(heap, (-new_power, neighbor)) # Wynik dla tego zestawu nagłaśniającego if max_power[n-1] == 0: print(-1) else: print(max_power[n-1]) # Wywołanie funkcji głównej if __name__ == "__main__": solve() |
English