题解: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   zhangzirui66  阅读(3)  评论(0编辑  收藏  举报  

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示