#!/usr/bin/env python3 # 28-Z3-4: Zbývající úkoly # Autor: Ondra Hlavatý # Načtení vstupu N, K = map(int, input().split()) t = list(map(int, input().split())) dep = [[] for _ in range(N)] for i in range(K): a, b = map(int, input().split()) dep[b].append(a) # Virtuální úkol dep.append(list(range(N))) t.append(0) fintime = {} # Callstack bude obsahovat dvojice (vrchol, stav) # kde stav je 0, pokud jsme ještě nepřidali závislosti na zásobník # 1, pokud uz ano callstack = [] callstack.append((N, 0)) while len(callstack) > 0: x, state = callstack[-1] if x not in fintime: if state == 0: callstack[-1] = (x, 1) for v in dep[x]: callstack.append((v, 0)) continue else: # Tady už víme, že výpočet všech závislostí proběhl, tedy můžeme # předpokládat že jsou ve fintime platné hodnoty fintime[x] = max([fintime[v] for v in dep[x]], default = 0) + t[x] callstack.pop() print(fintime[N])