#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
void maximize(T& a, const T& b) {
if (a < b) a = b;
}
template<typename T>
void minimize(T& a, const T& b) {
if (b < a) a = b;
}
// Ta sẽ nén mỗi thành phần liên thông mạnh thành 1 đỉnh
// Đồ thị sau khi nén G' sẽ là một DAG (đồ thị có hướng không có chu trình)
// Từ đây đưa về bài toán tìm đường đi dài nhất (đường đi có tổng lớn nhất) trên DAG
// => DP trên DAG
const int N = 1e5 + 5;
int n, m;
int a[N];
vector<int> adj[N];
int num_scc;
int tin[N], low[N], timer;
int id[N];
vector<int> st;
bool in_stack[N];
ll sum[N]; // sum[i]: tổng a(u) của các đỉnh u thuộc thành phần liên thông mạnh thứ i
void dfs(int u) {
tin[u] = low[u] = ++timer;
st.push_back(u);
in_stack[u] = true;
for (int v : adj[u]) {
if (!tin[v]) {
dfs(v);
}
if (in_stack[v]) {
minimize(low[u], low[v]);
}
}
if (low[u] == tin[u]) {
num_scc++;
while (true) {
int v = st.back(); st.pop_back();
in_stack[v] = false;
id[v] = num_scc;
sum[num_scc] += a[v];
if (v == u) break;
}
}
}
vector<int> g[N]; // Danh sách kề của đồ thị sau khi nén
// dp(u) = Đường đi dài nhất xuất phát tại u
ll memo[N];
ll dp(int u) {
ll& ans = memo[u];
if (ans != -1) return ans;
ans = sum[u];
for (int v : g[u]) {
maximize(ans, sum[u] + dp(v));
}
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int u = 1; u <= n; u++) cin >> a[u];
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
}
num_scc = 0;
timer = 0;
for (int u = 1; u <= n; u++) {
if (!tin[u]) dfs(u);
}
for (int u = 1; u <= n; u++) {
for (int v : adj[u]) {
if (id[u] == id[v]) continue;
g[id[u]].push_back(id[v]);
}
}
memset(memo, -1, sizeof memo);
ll ans = 0;
for (int u = 1; u <= num_scc; u++) {
maximize(ans, dp(u));
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtYXhpbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYSA8IGIpIGEgPSBiOyAgCn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgbWluaW1pemUoVCYgYSwgY29uc3QgVCYgYikgewoJaWYgKGIgPCBhKSBhID0gYjsgCn0KCi8vIFRhIHPhur0gbsOpbiBt4buXaSB0aMOgbmggcGjhuqduIGxpw6puIHRow7RuZyBt4bqhbmggdGjDoG5oIDEgxJHhu4luaAovLyDEkOG7kyB0aOG7iyBzYXUga2hpIG7DqW4gRycgc+G6vSBsw6AgbeG7mXQgREFHICjEkeG7kyB0aOG7iyBjw7MgaMaw4bubbmcga2jDtG5nIGPDsyBjaHUgdHLDrG5oKQovLyBU4burIMSRw6J5IMSRxrBhIHbhu4EgYsOgaSB0b8OhbiB0w6xtIMSRxrDhu51uZyDEkWkgZMOgaSBuaOG6pXQgKMSRxrDhu51uZyDEkWkgY8OzIHThu5VuZyBs4bubbiBuaOG6pXQpIHRyw6puIERBRwovLyA9PiBEUCB0csOqbiBEQUcKY29uc3QgaW50IE4gPSAxZTUgKyA1OyAKCmludCBuLCBtOyAKaW50IGFbTl07IAp2ZWN0b3I8aW50PiBhZGpbTl07IAoKaW50IG51bV9zY2M7ICAgCmludCB0aW5bTl0sIGxvd1tOXSwgdGltZXI7ICAgCmludCBpZFtOXTsgCnZlY3RvcjxpbnQ+IHN0OyAgCmJvb2wgaW5fc3RhY2tbTl07CgpsbCBzdW1bTl07IC8vIHN1bVtpXTogdOG7lW5nIGEodSkgY+G7p2EgY8OhYyDEkeG7iW5oIHUgdGh14buZYyB0aMOgbmggcGjhuqduIGxpw6puIHRow7RuZyBt4bqhbmggdGjhu6kgaQoKdm9pZCBkZnMoaW50IHUpIHsKCXRpblt1XSA9IGxvd1t1XSA9ICsrdGltZXI7ICAgCglzdC5wdXNoX2JhY2sodSk7ICAKCWluX3N0YWNrW3VdID0gdHJ1ZTsgIAoKCWZvciAoaW50IHYgOiBhZGpbdV0pIHsKCQlpZiAoIXRpblt2XSkgewoJCQlkZnModik7IAoJCX0KCQlpZiAoaW5fc3RhY2tbdl0pIHsKCQkJbWluaW1pemUobG93W3VdLCBsb3dbdl0pOyAKCQl9Cgl9CgoJaWYgKGxvd1t1XSA9PSB0aW5bdV0pIHsKCQludW1fc2NjKys7ICAKCQl3aGlsZSAodHJ1ZSkgewoJCQlpbnQgdiA9IHN0LmJhY2soKTsgc3QucG9wX2JhY2soKTsgCgkJCWluX3N0YWNrW3ZdID0gZmFsc2U7IAoJCQlpZFt2XSA9IG51bV9zY2M7ICAKCQkJc3VtW251bV9zY2NdICs9IGFbdl07IAoJCQlpZiAodiA9PSB1KSBicmVhazsgCgkJfQoJfQp9Cgp2ZWN0b3I8aW50PiBnW05dOyAvLyBEYW5oIHPDoWNoIGvhu4EgY+G7p2EgxJHhu5MgdGjhu4sgc2F1IGtoaSBuw6luCgovLyBkcCh1KSA9IMSQxrDhu51uZyDEkWkgZMOgaSBuaOG6pXQgeHXhuqV0IHBow6F0IHThuqFpIHUgCmxsIG1lbW9bTl07ICAKCmxsIGRwKGludCB1KSB7CglsbCYgYW5zID0gbWVtb1t1XTsgCglpZiAoYW5zICE9IC0xKSByZXR1cm4gYW5zOyAgCgoJYW5zID0gc3VtW3VdOyAgIAoJZm9yIChpbnQgdiA6IGdbdV0pIHsKCQltYXhpbWl6ZShhbnMsIHN1bVt1XSArIGRwKHYpKTsgCgl9CgoJcmV0dXJuIGFuczsgCn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuID4+IG07IAoJZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSBjaW4gPj4gYVt1XTsgCgoJZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspIHsKCQlpbnQgdSwgdjsgCgkJY2luID4+IHUgPj4gdjsgCgkJYWRqW3VdLnB1c2hfYmFjayh2KTsgCgl9CgoJbnVtX3NjYyA9IDA7ICAgCgl0aW1lciA9IDA7IAoJZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSB7CgkJaWYgKCF0aW5bdV0pIGRmcyh1KTsgCgl9CgoJZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSB7CgkJZm9yIChpbnQgdiA6IGFkalt1XSkgewoJCQlpZiAoaWRbdV0gPT0gaWRbdl0pIGNvbnRpbnVlOyAgCgkJCWdbaWRbdV1dLnB1c2hfYmFjayhpZFt2XSk7IAoJCX0KCX0KCgltZW1zZXQobWVtbywgLTEsIHNpemVvZiBtZW1vKTsgIAoKCWxsIGFucyA9IDA7IAoJZm9yIChpbnQgdSA9IDE7IHUgPD0gbnVtX3NjYzsgdSsrKSB7CgkJbWF4aW1pemUoYW5zLCBkcCh1KSk7IAoJfQoKCWNvdXQgPDwgYW5zIDw8ICdcbic7IAp9