#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair i_ll; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int main() { int N; cin >> N; vector S(N); for (int i = 0; i < N; i++) cin >> S[i]; vector< vector > d(N, vector(N, INT_MAX / 100)); for (int i = 0; i < N; i++) d[i][i] = 0; int M; cin >> M; while (M--) { int A, B, C; cin >> A >> B >> C; d[A][B] = d[B][A] = C; } for (int k = 0; k < N; k++) for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) d[i][j] = min(d[i][j], d[i][k] + d[k][j]); int mini = INT_MAX; for (int i = 1; i < N - 1; i++) for (int j = 1; j < N - 1; j++) { if (i == j) continue; mini = min(mini, d[0][i] + S[i] + d[i][j] + S[j] + d[j][N - 1]); } cout << mini << endl; }