Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
118999 | 陈家宝 | T4 回家 | C++ | 解答错误 | 40 | 12 MS | 2672 KB | 909 | 2024-01-03 13:10:03 |
#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(); 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; }