//反过来找比较简单
#include <cstdio>
#include <iostream>
#include <string.h>
using namespace std;
double map[110][110];
double weight[110];
double dist[110];
void dijkstar(int sta,int n)
{
int i,j,mark;
double maxi;
bool flag[100];
memset(flag,0,sizeof(flag));
memset(dist,0,sizeof(dist));
flag[sta]=1;
dist[sta]=1;
for(i=1;i<=n;i++)
{
maxi=-1;
for(j=1;j<=n;j++)
{
if(!flag[j])
{
if(map[sta][j]!=-1&&dist[j]<dist[sta]*map[sta][j])
dist[j]=dist[sta]*map[sta][j];
else if(map[sta][j]!=-1&&dist[j]==0)
dist[j]=dist[sta]*map[sta][j];
if(maxi<dist[j]&&dist[j]!=0)
{
mark=j;
maxi=dist[j];
}
}
}
if(maxi==-1)
break;
sta=mark;
flag[sta]=1;
}
}
void output( int n )
{
int i;
double sum;
sum=0.0;
for( i=1;i<n;i++ )
{
sum+=dist[i]*weight[i];
}
printf( "%.2f\n",sum );
}
int main ()
{
int n,m,a,b,i,j;
double rate;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
map[i][j]=-1;
for(i=1;i<n;i++)
scanf("%lf",&weight[i]);
for(i=1;i<=m;i++)
{
scanf("%d%d%lf",&a,&b,&rate);
if(1-rate>map[a][b])
map[a][b]=map[b][a]=1-rate;
}
dijkstar(n,n);
output(n);
}
return 0;
}