提交时间:2022-08-18 10:58:48

运行 ID: 55417

#include <bits/stdc++.h> using namespace std; inline int read(){ int x=0;bool f=1;char ch=getchar(); for(;ch<'0'||ch>'9';ch=getchar()) if(ch=='-') f=0; for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+(ch^48); return f?x:-x; } int t,n,m,u,v,h[100005],p[100005],siz[100005]; vector<int> g[100005]; void dfs(int x,int fa){ siz[x]=p[x]; for(int i=0;i<g[x].size();i++) if(g[x][i]^fa) dfs(g[x][i],x),siz[x]+=siz[g[x][i]]; } bool dfs2(int x,int fa){ // printf("%d\n",x); if(abs(h[x])>siz[x]) return 0; // if(g[x].size()==1) return 1; int sumh=0; for(int i=0;i<g[x].size();i++) if(g[x][i]^fa){ sumh+=h[g[x][i]]; if(!dfs2(g[x][i],x)) return 0; } return sumh<=(h[x]+p[x])&&((h[x]-sumh&1)==(p[x]&1)); } int main(){ t=read(); while(t--){ n=read(),m=read(); for(int i=1;i<=n;i++) p[i]=read(); for(int i=1;i<=n;i++) h[i]=read(); for(int i=1;i<n;i++) u=read(),v=read(),g[u].push_back(v),g[v].push_back(u); dfs(1,0); puts(dfs2(1,0)?"YES":"NO"); } return 0; }