#include using namespace std; using ll = long long; using vi = vector; using vb = vector; using vd = vector; using vl = vector; using vvi = vector; using vvb = vector; using vvd = vector; using vvl = vector; #define REP(i,n) for(ll i=0; i<(n); ++i) #define FOR(i,b,n) for(ll i=(b); i<(n); ++i) template void warshall_floyd(vector> &cost) { // cost[n][n] int n = cost.size(); REP(k, n) REP(i, n) REP(j, n) cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j]); } int main() { ll n; cin >> n; vl s(n); REP(i, n) cin >> s[i]; ll m; cin >> m; vl a(m); vl b(m); vl c(m); REP(i, m) cin >> a[i] >> b[i] >> c[i]; const ll INF = 1000000; vvl graph(n, vl(n, INF)); REP(i, m) { graph[a[i]][b[i]] = c[i]; graph[b[i]][a[i]] = c[i]; } warshall_floyd(graph); ll cost = INF; FOR(i, 1, n-1) FOR(j, 1, n-1) if (i != j) { cost = min(cost, graph[0][i] + graph[i][j] + graph[j][n - 1] + s[i] + s[j]); } cout << cost << endl; return 0; }