#include #include using namespace std; class range {private: struct I{int x;int operator*(){return x;}bool operator!=(I& lhs){return x s(n); for(int i : range(n)) { scanf("%d", &s[i]); } scanf("%d", &m); vector> graph(n, vector(n)); for(int i : range(n)) { for(int j : range(n)) { graph[i][j] = i==j ? 0 : inf; } } for(int i : range(m)) { int a, b, c; scanf("%d%d%d", &a, &b, &c); graph[a][b] = c; graph[b][a] = c; } for(int k : range(n)) { for(int i : range(n)) { for(int j : range(n)) { graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j]); } } } int res = inf; for(int i : range(1, n-1)) { for(int j : range(1, n-1)) { if(i==j) { continue; } res = min(res, graph[0][i] + graph[i][j] + graph[j][n-1] + s[i] + s[j]); } } printf("%d\n", res); return 0; }