Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
55417 | seanlsy | T4 回家 | C++ | 内存超限 | 20 | 86 MS | 133720 KB | 1047 | 2022-08-18 10:58:48 |
#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; }