#include<bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define ll long long
#define all(v) (v).begin(), (v).end()
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define F first
#define S second
const ll M = 1e18 + 7;
const int N = 2e5 + 7;
const int MOD = 1e9 + 7;
int cnt = 0;
vector<int> tmp;
int dfs(int node, int ans, vector<int> &lvl,
vector<int> &vis, vector<int> check, vector<int> adj[]) {
vis[node] = 1;
if(check[node]) tmp.push_back(node);
int cost = 0;
for(auto it: adj[node]) {
if(!vis[it]) {
// lvl[it] = lvl[node]+1;
cost += dfs(it,2,lvl,vis,check,adj);
// lvl[node] = max(lvl[node],lvl[it]+1);
}
}
if(cost==0) {
if(check[node] == 0) {
return 0;
}
}
return ans+cost;
}
void dfs2(int node, int n ,vector<int> &lvl,
vector<int> adj[])
{
queue<int> q;
q.push(node);
int vis[n] = {0};
while(!q.empty()) {
int v = q.front();
q.pop();
for(auto it: adj[v]){
if(!vis[it]) {
vis[it] = 1;
lvl[it] = lvl[v]+1;
q.push(it);
}
}
}
}
void Hrid_solve(){
int n;
cin >> n;
vector<int> check(n), vis(n,0),lvl(n,0);
for(auto &i: check) cin >> i;
vector<int> adj[n];
for(int i = 0; i < n-1; i++) {
int u,v;
cin >> u >> v;
u--, v--;
adj[u].push_back(v);
adj[v].push_back(u);
}
int ans = 0;
for(int i = 0; i < n; i++) {
if(check[i]) {
dfs2(i,n,lvl,adj);
ans = dfs(0,0,lvl,vis,check,adj);
break;
}
}
// for(int i = 0; i < n; i++) {
// cout <<i+1 << " " << lvl[i] << endl;
// }
// for(auto i: tmp) cout << i << " ";
// cout << endl;
// cout << tmp[0] << " " << lvl[tmp[0]] << endl;
cout << ans-lvl[tmp[0]] << endl;
tmp.clear();
}
/* ************** What defines us is how well we rise after we Fall !! ************** */
int32_t main(){
ios_base::sync_with_stdio(false);cin.tie(NULL);
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
int tc = 1;
cin >> tc;
for(int kase = 1; kase <= tc; kase++){
// cout << "Case " << kase << ": ";
Hrid_solve();
}
return 0;
}