提交时间:2024-09-13 17:26:58
运行 ID: 275693
#include<bits/stdc++.h> using namespace std; int t; int d[100002]; int w[100002]; vector<int>b[100002]; void dfs1(int x,int fa,int deep) { d[x]=deep; if(b[x].size()==0) return; for(int i=0; i<b[x].size(); i++) { int u=b[x][i]; if(u!=fa) dfs1(u,x,deep++); } } int main() { scanf("%d",&t); while(t--) { memset(b,0,sizeof(b)); memset(d,0,sizeof(d)); int n; scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d",&w[i]); for(int i=1; i<n; i++) { int x,y; scanf("%d%d",&x,&y); b[x].push_back(y); b[y].push_back(x); } dfs1(1,0,1); int dp=1; int k; for(int i=1; i<=n; i++) { if(dp<d[i]) { dp=d[i]; k=i; } } bool f=1; for(int i=k; i>=1; i--) { if(w[i]) { if(b[i].size()>1) { f=0; printf("No\n"); break; } } } if(f) printf("Yes\n"); } }