题解:AT_arc106_b [ARC106B] Values
题目其实不难,乍一眼看可能会误认为是搜索,仔细读题,其实跟并查集相关,因为有两种选择。所以我们用并查集查找相连的边,然后遍历一遍就做完了。
#include<bits/stdc++.h>
using namespace std;
int n, m, b[400005], a[200005];
int father[200005];
long long sum[200005];
int find(int x){
return father[x] ? father[x] = find(father[x]) : x;
}
bool vis[200001];
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i ++) cin >> a[i];
for(int i = 1; i <= n; i ++) cin >> b[i];
for(int i = 1, u, v; i <= m; i ++){
cin >> u >> v;
u = find(u), v = find(v);
if(u != v) father[u] = v;
}
for(int i = 1; i <= n; i ++) sum[find(i)] += a[i] - b[i];
for(int i = 1; i <= n; i ++) if(sum[i]) puts("No"), exit(0);
puts("Yes");
return 0;
}
posted on 2024-04-10 18:59 zhangzirui66 阅读(10) 评论(0) 收藏 举报 来源