/*If we keep holding onto yesterday, what are we going to be tomorrow?*/
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 200005;
vector<array<int, 2>>g[N];
long long d[N], w[N], ryo[N];
long long ans = LLONG_MIN;
long long dfs(int u, int p) {
long long mx = -(1ll << 50);
ryo[u] = mx;
for(auto [v, wt] : g[u]) {
if(v == p) continue;
d[v] = d[u] - 2ll * wt + w[v];
long long yo = dfs(v, u);
long long ret = yo + mx - 2 * d[u] + w[u];
ans = max(ans, ret);
mx = max(mx, yo);
ryo[u] = max(ryo[v], d[v]);
ans = max(ans, d[u] + ryo[v] - 2 * d[u] + w[u]);
}
return max(mx, d[u]);
}
void solve() {
int n;
cin >> n;
for(int i = 1; i <= n; i++) g[i].clear();
for(int i = 1; i <= n; i++) {
cin >> w[i];
}
d[1] = w[1];
for(int i = 0; i < n - 1; i++) {
int u, v, wt;
cin >> u >> v >> wt;
g[u].push_back({v, wt});
g[v].push_back({u, wt});
}
ans = LLONG_MIN;
dfs(1, 0);
cout << ans << '\n';
}
int32_t main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t = 1;
cin >> t;
while(t--){
solve();
}
return 0;
}