Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
55436 _JF_ T4 回家 C++ 通过 100 32 MS 1204 KB 1496 2022-08-18 11:01:36

Tests(5/5):


#include <bits/stdc++.h> using namespace std; struct Node { int v,next; } T[200005]; int n,m,cnt,t; int H[100005],p[100005],h[100005],hp[100005]; bool vis[100005],ans=1; inline void Add(int x,int y) { T[++cnt]=Node {y,H[x]}; H[x]=cnt; } void Search(int now) { for(int i=H[now]; i; i=T[i].next) { int to=T[i].v; if(!vis[to]) { vis[to]=1; Search(to); p[now]+=p[to]; } } } void Check(int now) { if(h[now]>=0) hp[now]+=h[now]; else h[now]=-h[now]; if(h[now]>p[now]) { ans=0; return ; } if((p[now]-h[now])%2) { ans=0; return ; } hp[now]+=(p[now]-h[now])/2; int sum=0; for(int i=H[now]; i; i=T[i].next) { int to=T[i].v; if(!vis[to]) { vis[to]=1; Check(to); if(!ans) return ; sum+=hp[to]; } } if(hp[now]-sum<0) { ans=0; return ; } } int main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>t; while(t--) { cin>>n>>m; for(int i=1; i<=n; i++) cin>>p[i]; for(int i=1; i<=n; i++) cin>>h[i]; memset(H,0,sizeof(H)); cnt=0; for(int i=1,x,y; i<=n-1; i++) { cin>>x>>y; Add(x,y),Add(y,x); } memset(vis,0,sizeof(vis)); vis[1]=1; Search(1); memset(vis,0,sizeof(vis)); memset(hp,0,sizeof(hp)); ans=1; vis[1]=1; Check(1); cout<<(ans?"YES\n":"NO\n"); } return 0; }


测评信息: