
#include<bits/stdc++.h>
#define N 10010
using namespace std;
int head[N],to[N],vis[N],net[N],cut;
int num[N],f[N];
int vv[N];
queue<int>dl;
double dis[N];
int l,p;
void add(int from,int t,int v)
{
net[++cut]=head[from];
to[cut]=t;
vis[cut]=v;
head[from]=cut;
}
int spfa(double mid)//数据类型要一致
{
for(int i=1;i<=l;i++)
dl.push(i),f[i]=1,dis[i]=num[i]=0;
while(dl.size())
{
int x=dl.front();
dl.pop();
f[x]=0;
for(int i=head[x];i;i=net[i])
{
int y=to[i];
double v=vis[i]*mid-vv[x];
if(dis[x]+v<dis[y])
{
dis[y]=dis[x]+v;
num[y]=num[x]+1;
if(num[y]>=p)return 1;
if(!f[y])
{
dl.push(y);
f[y]=1;
}
}
}
}
return 0;
}
int main()
{
scanf("%d%d",&l,&p);
for(int i=1;i<=l;i++)
scanf("%d",&vv[i]);
for(int i=1;i<=p;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
double l=0,r=1e8;
while(r-l>0.0001)
{
double mid=(l+r)/2;
if(spfa(mid))l=mid;
else r=mid;
}
printf("%.2lf",r);
return 0;
}