#include #include using namespace std; using ld = long double; ld dfs(int u, const vector>& g, const vector&c, vector&e, int d){ if(d > 30) return e[u]; e[u] = 0; for(auto v : g[u]) e[u] = max(e[u], dfs(v,g,c,e, d+1)); return e[u] = max(e[u], c[u] + e[u]/2); } int main(){ int n,m,u,v; cin >> n >> m; vector c(n), e(n, -1); vector> g(n); for(auto &x : c) cin >> x; while(m--) cin >> u >> v, g[u].push_back(v); cout << dfs(0, g, c, e, 0) << endl; }