#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T; cin >> T;
while (T--) {
int N; cin >> N;
vector<ll> W(N);
for (int i = 0; i < N; i++) cin >> W[i];
vector<vector<pair<int,ll>>> adj(N);
for (int i = 0; i < N - 1; i++) {
int u, v; ll c;
cin >> u >> v >> c;
u--; v--;
adj[u].emplace_back(v,c);
adj[v].emplace_back(u,c);
}
ll global_max = LLONG_MIN;
function<ll(int,int)> dfs = [&](int u, int p) -> ll {
ll best1 = 0, best2 = 0;
for (auto &[to,cost] : adj[u]) {
if (to == p) continue;
ll val = dfs(to,u) - 2*cost;
if (val > best1) {
best2 = best1;
best1 = val;
} else if (val > best2) {
best2 = val;
}
}
ll cur = W[u] + best1 + best2;
if (cur > global_max) global_max = cur;
return W[u] + best1;
};
dfs(0,-1);
cout << global_max << "\n";
}
return 0;
}