#include<bits/stdc++.h>
#define int long long
using namespace std;
void read(int &x){
x=0;bool f=0;char ch=getchar();
while(ch>'9'||ch<'0'){
if(ch=='-')f=1;
ch=getchar();
}do{x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}while(ch>='0'&&ch<='9');
x=f?-x:x;
}
int t,n,x,y,d[100001][17],dp[100001],a[100001],tj,tjp,i1,i2;
vector<int>v[100001];
void dfs(int x,int f){
dp[x]=dp[f]+1;
d[x][0]=f;
for(int i=1;(1<<i)<=dp[x];i++)d[x][i]=d[d[x][i-1]][i-1];
for(int i:v[x])if(i!=f)dfs(i,x);
}
int lca(int x,int y){
if(dp[x]<dp[y])swap(x,y);
for(int i=17;i>=0;i--)
if(dp[x]-(1<<i)>=dp[y]){
x=d[x][i];
if(a[x])tj++;
}
if(x==y)return x;
for(int i=17;i>=0;i--)
if(d[x][i]!=d[y][i]){
x=d[x][i],y=d[y][i];
if(a[x])tj++;
if(a[y])tj++;
}
if(a[d[x][0]])tj++;
return d[x][0];
}
signed main(){
read(t);
while(t--){
read(n),tj=tjp=i1=i2=0;
memset(d,0,sizeof(d)),memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)read(a[i]),v[i].clear(),tjp+=a[i];
for(int i=1;i<n;i++)read(x),read(y),v[x].push_back(y),v[t].push_back(x);
if(tjp==1)cout<<"Yes\n";
else {
dfs(1,1);
for(int i=1;i<=n;i++){
if(a[i]){
if(dp[i]<dp[i1])i1=i;
else if(dp[i]<dp[i2])i2=i;
}
}tj=2,lca(i1,i2);
if(tj!=tjp)cout<<"No\n";
else cout<<"Yes\n";
}
}
return 0;
}