#include <bits/stdc++.h>   using namespace std;   int main() {     ios::sync_with_stdio(false);     int n, u, v, c, a, b, t;     cin >> n;     long long w[n], A, B, Su[n], SMax = 0;     int g[n], S[n], Pa[n];     vector<pair<int, long long>> D[n];     vector<int> T, P;     for (int i = 0; i < n; i++) {       cin >> w[i];       g[i] = 1;     }     for (int i = 0; i < n - 1; i++) {       cin >> u >> v >> c;       u--;       v--;       D[u].push_back({v, c});       D[v].push_back({u, c});     }     g[0] = 0;     T.push_back(0);     for (int i = 0; i < T.size(); i++) {       t = 0;       for (int y = 0; y < D[T[i]].size(); y++) {         a = D[T[i]][y].first;         if (g[a] == 1) {           Pa[a] = T[i];           g[a] = 0;           t = 1;           T.push_back(a);         }       }       if (t == 0) {         P.push_back(T[i]);       }     }     T.clear();     for (int i = 0; i < n; i++) {       g[i] = 1;       S[i] = D[i].size() - 1;       if (i == 0) {         S[i]++;       }     }     for (int i = 0; i < P.size(); i++) {       g[P[i]] = 0;       a = P[i];       if (a != 0) {         S[Pa[a]]--;         if (S[Pa[a]] == 0) {           P.push_back(Pa[a]);         }       }       A = 0;       B = 0;       for (int y = 0; y < D[a].size(); y++) {         b = D[a][y].first;         c = D[a][y].second;         if (b != Pa[a]) {           if (Su[b] - c + w[b] > A) {             B = A;             A = Su[b] - c + w[b];           } else if (Su[b] - c + w[b] > B) {             B = Su[b] - c + w[b];           }         }       }       SMax = max(SMax, A + B + w[a]);       Su[a] = A;     }     cout << SMax;     return 0;   }   