社区讨论
WA9 个求条
AT_agc010_c[AGC010C] Cleaning参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m5natd8r
- 此快照首次捕获于
- 2025/01/08 10:46 去年
- 此快照最后确认于
- 2025/01/08 10:59 去年
CPP
#include<bits/stdc++.h>
#define int long long
#define Maxn 100005
using namespace std;
int w[Maxn];
vector<int> q[Maxn];
int f[Maxn],flag = 0;
void dfs(int x,int fa) {
if(q[x].size() == 1)return f[x] = w[x],void();
for(int u:q[x]) {
if(u == fa)continue;
dfs(u,x);
if(flag)return ;
f[x] += f[u];
}
if(f[x] > w[x]*2)return flag = 1/*,cout<<x<<"\n"*/,void();
f[x] = 2*w[x]-f[x];
}
signed main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>w[i];
if(n == 2)return cout<<(w[1] == w[2]?"YES":"NO"),0;
for(int i=1;i<n;i++) {
int u,v;
cin>>u>>v;
q[u].push_back(v);
q[v].push_back(u);
} int rt = 1;
while(q[rt].size() == 1)rt ++;
// cout<<rt<<"\n";
dfs(rt,0);
// for(int i=1;i<=n;i++)cout<<f[i]<<"\n";
if(!flag&&!f[rt])return cout<<"YES",0;
cout<<"NO";
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...