//先找一个美丽的树,然后遍历树找节点,分析是否符合条件。
//画几个图,思考下。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int n=1e6+11;
int a,b,c[n],d,l,r,k,w,an;
vector<int>t[n];
void dfs(int x,int y)
{
if(c[x]*2<c[y])
{
k=x;
}
for(int v:t[x])
{
if(v!=y)
{
dfs(v,x);
}
}
}
void dfs1(int x,int y)
{
for(int v:t[x])
{
if(v!=y)
{
if(c[v]*2<c[x])
{
w=1;
}
dfs1(v,x);
}
}
}
void dfs2(int x,int y)
{
for(int v:t[x])
{
if(v!=y)
{
if(c[v]<=c[x]*2)
{
an++;
dfs2(v,x);
}
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>a;
while(a--)
{
cin>>b;
an=0;
for(int i=1;i<=b;i++)
{
t[i].clear();
}
for(int i=1;i<=b;i++)
{
cin>>c[i];
}
for(int i=1;i<=b-1;i++)
{
cin>>l>>r;
t[l].push_back(r);
t[r].push_back(l);
}
k=1;
w=0;
dfs(1,0);
dfs1(k,0);
if(w==1)
{
cout<<"0"<<endl;
}
else
{
an=1;
dfs2(k,0);
cout<<an<<endl;
}
}
}