#include #include #include #include using namespace std; #define RREP(i,s,e) for (int i = e-1; i >= s; i--) #define rrep(i,n) RREP(i,0,n) #define REP(i,s,e) for (int i = s; i < e; i++) #define rep(i,n) REP(i,0,n) #define INF 1e8 vector>> e; int distance(int a, int b) { priority_queue,vector>,greater>> q; vector d(50); fill(d.begin(),d.end(),INF); d[a] = 0; q.push(make_pair(0,a)); while (!q.empty()) { int v; tie(ignore,v) = q.top(); q.pop(); rep (i,e[v].size()) { int to, cost; tie(to,cost) = e[v][i]; if (d[v]+cost < d[to]) { d[to] = d[v]+cost; q.push(make_pair(d[to],to)); } } } return d[b]; } int main() { int n, m; vector s; cin >> n; s.resize(n); rep (i,n) cin >> s[i]; cin >> m; e.resize(n); rep (i,m) { int a, b, c; cin >> a >> b >> c; e[a].push_back(make_pair(b,c)); e[b].push_back(make_pair(a,c)); } int ans = INF; REP (a,1,n-1) REP (b,1,n-1) { if (a == b) continue; ans = min(ans,distance(0,a)+s[a]+distance(a,b)+s[b]+distance(b,n-1)); } cout << ans << endl; return 0; }