#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; using vi = vector; using vvi = vector; using vl = vector; using vvl = vector; using vb = vector; using vvb = vector; using vd = vector; using vs = vector; using pii = pair; using pll = pair; using pdd = pair; using vpii = vector; using vpll = vector; using vpdd = vector; const int inf = (1 << 30) - 1; const ll INF = 1LL << 60; //const int MOD = 1000000007; const int MOD = 998244353; void warshall_floyd(vvi& d, int V) { for (int k = 0; k < V; k++) for (int i = 0; i < V; i++) for (int j = 0; j < V; j++) d[i][j] = min(d[i][j], d[i][k] + d[k][j]); } int main() { int n; cin >> n; vi s(n); for (int i = 0; i < n; i++) { cin >> s[i]; } int m; cin >> m; vi a(m), b(m), c(m); for (int i = 0; i < m; i++) { cin >> a[i] >> b[i] >> c[i]; } vvi g(n, vi(n, inf)); for (int i = 0; i < n; i++) g[i][i] = 0; for (int i = 0; i < m; i++) { g[a[i]][b[i]] = g[b[i]][a[i]] = c[i]; } warshall_floyd(g, n); int ans = inf; // 滞在先を全探索する // 0からi に向かい、i に滞在した後 jに滞在し n-1 へ向かう for (int i = 1; i <= n - 2; i++) { int cost1 = g[0][i] + s[i]; for (int j = 1; j <= n - 2; j++) { if (i == j) continue; ans = min(ans, cost1 + g[i][j] + s[j] + g[j][n - 1]); } } cout << ans << endl; return 0; }