#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7;
const int N = 500005;
const int INF = 0x3f3f3f3f;
ll dp[N][2], w[N];
ll res;
vector<pair<int, ll>> G[N];
ll c[N];
void dfs(int u, int fa) {
for (auto [v, w] : G[u]) {
if (v != fa) {
c[v] = w;
dfs(v, u);
}
}
res = max(res, dp[u][0] + dp[u][1] - w[u]);
if (dp[u][0] == -1e12) {
ll cur = w[u] + w[fa] - (2ll * c[u]);
if (dp[fa][0] <= cur) {
swap(dp[fa][0], dp[fa][1]);
dp[fa][0] = cur;
} else {
dp[fa][1] = max(dp[fa][1], cur);
}
} else {
if (fa != 0) {
ll cur1 = w[fa] + w[u] - (2ll * c[u]);
ll cur2 = dp[u][0] + w[fa] - (2ll * c[u]);
res = max(res, cur2);
cur1 = max(cur1, cur2);
if (dp[fa][0] <= cur1) {
swap(dp[fa][0], dp[fa][1]);
dp[fa][0] = cur1;
} else {
dp[fa][1] = max(dp[fa][1], cur1);
}
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int _;
cin >> _;
while (_--) {
int n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> w[i];
for (int i = 1; i < n; i++) {
int u, v;
ll w;
cin >> u >> v >> w;
G[u].push_back({v, w});
G[v].push_back({u, w});
}
for (int i = 0; i <= n; i++) {
dp[i][0] = dp[i][1] = -1e12;
c[i] = 0;
}
res = -1e18;
dfs(1, 0);
cout << res << "\n";
for (int i = 1; i <= n; i++) G[i].clear();
}
return 0;
}