#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>
#include <stack>
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
template <class T>
using orderStaticTree =
tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define ll long long
#define saleh \
ios_base::sync_with_stdio(false); \
cin.tie(nullptr);
const int md = 1e9 + 7;
#define ll long long
const ll remo = -1e18;
ll sumBeforWeak = 0;
stack<int> firstLayer;
void dfs(int node, vector<vector<int>> &adj, vector<bool> &vis, map<pair<int, int>, int> mp, vector<int> &val)
{
vis[node] = 1;
sumBeforWeak += val[node];
for (auto i : adj[node])
{
if (!vis[i])
{
if (mp[{node, i}] == 1)
{
dfs(i, adj, vis, mp, val);
}
else
{
firstLayer.push(i);
}
}
}
}
void dfs2(int root, int par, int node, vector<vector<int>> &adj, vector<vector<int>> &adj2,
vector<bool> &vis, map<pair<int, int>, int> mp, vector<int> &val, vector<ll> &Gen)
{
vis[node] = 1;
Gen[root] += val[node];
for (auto i : adj[node])
{
if (!vis[i])
{
if (mp[{node, i}] == 0)
{
adj2[root].push_back(i);
}
else
{
dfs2(root, node, i, adj, adj2, vis, mp, val, Gen);
}
}
}
for (auto i : adj2[root])
{
dfs2(i, i, i, adj, adj2, vis, mp, val, Gen);
}
}
ll rec(int node, vector<vector<int>> &adj2, vector<ll> &Gen)
{
if (adj2[node].size() == 0)
return Gen[node];
ll maxi = 0;
for (auto i : adj2[node])
{
maxi = max(maxi, rec(i, adj2, Gen));
}
return Gen[node] + maxi;
}
int main()
{
saleh;
int t;
cin >> t;
while (t--)
{
sumBeforWeak = 0;
stack<int> st2;
firstLayer = st2;
int n;
cin >> n;
map<pair<int, int>, int> mp;
vector<int> val(n);
for (auto &i : val)
cin >> i;
vector<vector<int>> adj(n, vector<int>());
for (int u, v, s, i = 0; i < n - 1; i++)
{
cin >> u >> v >> s;
--u;
--v;
adj[u].push_back(v);
adj[v].push_back(u);
mp[{u, v}] = mp[{v, u}] = s;
}
vector<bool> vis(n);
dfs(0, adj, vis, mp, val);
vector<ll> Gen(n);
Gen[0] = sumBeforWeak;
vector<vector<int>> adj2(n, vector<int>());
while (!firstLayer.empty())
{
int u = firstLayer.top();
// cout<<u+1<<" ";
firstLayer.pop();
adj2[0].push_back(u);
}
// cout<<endl;
// cout<<sumBeforWeak<<endl;
for (auto i : adj2[0])
{
dfs2(i, i, i, adj, adj2, vis, mp, val, Gen);
}
cout << rec(0, adj2, Gen) << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CnRlbXBsYXRlIDxjbGFzcyBUPgp1c2luZyBvcmRlclN0YXRpY1RyZWUgPQogICAgdHJlZTxULCBudWxsX3R5cGUsIGxlc3M8VD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+OwoKI2RlZmluZSBsbCBsb25nIGxvbmcKCiNkZWZpbmUgc2FsZWggICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IFwKICAgIGNpbi50aWUobnVsbHB0cik7Cgpjb25zdCBpbnQgbWQgPSAxZTkgKyA3OwojZGVmaW5lIGxsIGxvbmcgbG9uZwoKY29uc3QgbGwgcmVtbyA9IC0xZTE4OwpsbCBzdW1CZWZvcldlYWsgPSAwOwpzdGFjazxpbnQ+IGZpcnN0TGF5ZXI7Cgp2b2lkIGRmcyhpbnQgbm9kZSwgdmVjdG9yPHZlY3RvcjxpbnQ+PiAmYWRqLCB2ZWN0b3I8Ym9vbD4gJnZpcywgbWFwPHBhaXI8aW50LCBpbnQ+LCBpbnQ+IG1wLCB2ZWN0b3I8aW50PiAmdmFsKQp7CiAgICB2aXNbbm9kZV0gPSAxOwogICAgc3VtQmVmb3JXZWFrICs9IHZhbFtub2RlXTsKICAgIGZvciAoYXV0byBpIDogYWRqW25vZGVdKQogICAgewogICAgICAgIGlmICghdmlzW2ldKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKG1wW3tub2RlLCBpfV0gPT0gMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGZzKGksIGFkaiwgdmlzLCBtcCwgdmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZpcnN0TGF5ZXIucHVzaChpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBkZnMyKGludCByb290LCBpbnQgcGFyLCBpbnQgbm9kZSwgdmVjdG9yPHZlY3RvcjxpbnQ+PiAmYWRqLCB2ZWN0b3I8dmVjdG9yPGludD4+ICZhZGoyLAogICAgICAgICAgdmVjdG9yPGJvb2w+ICZ2aXMsIG1hcDxwYWlyPGludCwgaW50PiwgaW50PiBtcCwgdmVjdG9yPGludD4gJnZhbCwgdmVjdG9yPGxsPiAmR2VuKQp7CgogICAgdmlzW25vZGVdID0gMTsKICAgIEdlbltyb290XSArPSB2YWxbbm9kZV07CiAgICBmb3IgKGF1dG8gaSA6IGFkaltub2RlXSkKICAgIHsKICAgICAgICBpZiAoIXZpc1tpXSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChtcFt7bm9kZSwgaX1dID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFkajJbcm9vdF0ucHVzaF9iYWNrKGkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGZzMihyb290LCBub2RlLCBpLCBhZGosIGFkajIsIHZpcywgbXAsIHZhbCwgR2VuKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGF1dG8gaSA6IGFkajJbcm9vdF0pCiAgICB7CiAgICAgICAgZGZzMihpLCBpLCBpLCBhZGosIGFkajIsIHZpcywgbXAsIHZhbCwgR2VuKTsKICAgIH0KfQoKbGwgcmVjKGludCBub2RlLCB2ZWN0b3I8dmVjdG9yPGludD4+ICZhZGoyLCB2ZWN0b3I8bGw+ICZHZW4pCnsKICAgIGlmIChhZGoyW25vZGVdLnNpemUoKSA9PSAwKQogICAgICAgIHJldHVybiBHZW5bbm9kZV07CiAgICBsbCBtYXhpID0gMDsKICAgIGZvciAoYXV0byBpIDogYWRqMltub2RlXSkKICAgIHsKICAgICAgICBtYXhpID0gbWF4KG1heGksIHJlYyhpLCBhZGoyLCBHZW4pKTsKICAgIH0KICAgIHJldHVybiBHZW5bbm9kZV0gKyBtYXhpOwp9CgppbnQgbWFpbigpCnsKICAgIHNhbGVoOwogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pCiAgICB7CiAgICAgICAgc3VtQmVmb3JXZWFrID0gMDsKICAgICAgICBzdGFjazxpbnQ+IHN0MjsKICAgICAgICBmaXJzdExheWVyID0gc3QyOwoKICAgICAgICBpbnQgbjsKICAgICAgICBjaW4gPj4gbjsKICAgICAgICBtYXA8cGFpcjxpbnQsIGludD4sIGludD4gbXA7CiAgICAgICAgdmVjdG9yPGludD4gdmFsKG4pOwogICAgICAgIGZvciAoYXV0byAmaSA6IHZhbCkKICAgICAgICAgICAgY2luID4+IGk7CiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGoobiwgdmVjdG9yPGludD4oKSk7CiAgICAgICAgZm9yIChpbnQgdSwgdiwgcywgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgY2luID4+IHUgPj4gdiA+PiBzOwogICAgICAgICAgICAtLXU7CiAgICAgICAgICAgIC0tdjsKICAgICAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICAgICAgYWRqW3ZdLnB1c2hfYmFjayh1KTsKICAgICAgICAgICAgbXBbe3UsIHZ9XSA9IG1wW3t2LCB1fV0gPSBzOwogICAgICAgIH0KICAgICAgICB2ZWN0b3I8Ym9vbD4gdmlzKG4pOwoKICAgICAgICBkZnMoMCwgYWRqLCB2aXMsIG1wLCB2YWwpOwogICAgICAgIHZlY3RvcjxsbD4gR2VuKG4pOwogICAgICAgIEdlblswXSA9IHN1bUJlZm9yV2VhazsKCiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGoyKG4sIHZlY3RvcjxpbnQ+KCkpOwogICAgICAgIHdoaWxlICghZmlyc3RMYXllci5lbXB0eSgpKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHUgPSBmaXJzdExheWVyLnRvcCgpOwogICAgICAgICAgICAvLyBjb3V0PDx1KzE8PCIgIjsKICAgICAgICAgICAgZmlyc3RMYXllci5wb3AoKTsKICAgICAgICAgICAgYWRqMlswXS5wdXNoX2JhY2sodSk7CiAgICAgICAgfQogICAgICAgIC8vIGNvdXQ8PGVuZGw7CiAgICAgICAgLy8gY291dDw8c3VtQmVmb3JXZWFrPDxlbmRsOwoKICAgICAgICBmb3IgKGF1dG8gaSA6IGFkajJbMF0pCiAgICAgICAgewogICAgICAgICAgICBkZnMyKGksIGksIGksIGFkaiwgYWRqMiwgdmlzLCBtcCwgdmFsLCBHZW4pOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IHJlYygwLCBhZGoyLCBHZW4pIDw8IGVuZGw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=