#include<bits/stdc++.h>
using namespace std;
const int maxn=100001;
int num;bool a[maxn];
vector<int>v[maxn];
vector<bool>m[maxn-1];
bool dfs(int x,int f,int cnt)
{
if(m[x][cnt])return false;
m[x][cnt]=true;
int res=cnt+a[x];
if(res==num)return true;
for(auto u:v[x])
if(u!=f)
if(dfs(u,x,res))return true;
return false;
}
int main()
{
int t;
cin>>t;
while(t--)
{
num=0;
bool flag=false;
int n;
cin>>n;
for (int i=1;i<=n;i++)
m[i].assign(n+1,false);
for(int i=1;i<=n;i++)
{
int k;
cin>>k;
if(k==1)a[i]=true;
else a[i]=false;
if(a[i])num++;
}
for(int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
for(int i=1;i<=n;i++)
if(a[i])
if(dfs(i,0,0))
{
cout<<"Yes"<<endl;
flag=true;
break;
}
if(!flag)cout<<"No"<<endl;
for(int i=1;i<=n;i++)
{
v[i].clear();
m[i].clear();
}
}
return 0;
}