//郑老师和阿梓一样可爱^_^
#include <bits/stdc++.h>
using namespace std;
const int N = 6e5 + 10;
//const int M = 998244353;
const int mod = 1e9+7;
#define int long long
#define db double
int up(int a,int b){return a<0?a/b:(a+b-1)/b;}
#define endl " \n"
#define all(x) (x).begin(),(x).end()
#define YES {cout<<"YES"<<endl;return;}
#define NO {cout<<"NO"<<endl;return;}
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define PII pair<int,int>
#define fast ios::sync_with_stdio(false);cin.tie(0);
int n,m;
db w[1010];
vector<pair<int,db>>G[1010];
bool check(db mid){
vector<pair<int,db>>g[n+1];
for(int u=1;u<=n;u++){
for(auto [v,W]:G[u]){
db c=mid*(db)W-(db)w[u];
g[u].push_back({v,c});
}
}
queue<int>q;
vector<int>st(n+1),cnt(n+1);
vector<db>dist(n+1);
for(int i=1;i<=n;i++)q.push(i);
while(q.size()){
auto u=q.front();q.pop();
if(st[u])continue;
st[u]=1;
for(auto [v,W]:g[u]){
if(dist[v]>dist[u]+W){
cnt[v]=cnt[u]+1;
if(cnt[v]>=n)return true;
dist[v]=dist[u]+W;
q.push(v);
st[v]=0;
}
}
}
return false;
}
void solve(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>w[i];
for(int i=1;i<=m;i++){
int a,b,c;cin>>a>>b>>c;
G[a].push_back({b,c});
}
db l=0,r=1000;
while(r-l>=1e-4){
db mid=(l+r)/2;
if(check(mid))l=mid;
else r=mid;
}
printf("%.2lf",l);
}
signed main(){
fast
int t;t=1;//cin>>t;
while(t--) {
//run();
solve();
}
return ~~(0^_^0);
}