Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
119000 | 陈家宝 | T4 回家 | C++ | 通过 | 100 | 9 MS | 2668 KB | 896 | 2024-01-03 13:10:43 |
#include<bits/stdc++.h> #define N 100005 using namespace std; inline int read(){ int x(0),f(1);char ch(getchar()); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48),ch=getchar();} return x*f; } int T,n,m,p[N],sum[N],h[N]; vector <int> t[N]; bool dfs(int k,int f){ sum[k]=p[k]; for(int i(0);i<t[k].size();++i){ int s(t[k][i]); if(s^f){ if(!dfs(s,k))return 0; sum[k]+=sum[s]; } } return sum[k]>=h[k]&&min(sum[k]+h[k],sum[k]-h[k])>=0&&!(sum[k]-h[k]&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){ int u(read()),v(read()); t[u].push_back(v); t[v].push_back(u); } if(!dfs(1,0))puts("NO"); else puts("YES"); for(int i(1);i<=n;++i) t[i].clear(); } return 0; }