C. Uncle Bogdan and Country Happiness(dfs + 回溯)

news2024/12/24 21:11:23

Problem - C - Codeforces

 波格丹叔叔在弗林特船长的团队里待了很长一段时间,有时会怀念他的家乡。今天他告诉你他的国家是如何引入幸福指数的。有n个城市和n -1条连接城市的无方向道路。任何城市的公民都可以通过这些道路到达任何其他城市。城市编号从1到n,城市1是首都。换句话说,这个国家有一个树形结构。有100万公民居住在这个国家。有很多人住在第i个城市,但他们都在首都工作。傍晚时分,所有市民都选择最短路径返回各自的城市。每个人都有自己的心情:有的人带着好心情离开,有的人已经心情不好了。此外,任何人都可以破坏他的心情在回家的路上。如果一个人心情不好,他不会改善它。每个城市都安装了幸福探测器,以监测每个到访城市的人的幸福程度。第i个城市的检测器计算出幸福指数h,即心情好的人数减去心情不好的人数。简单地说,一个人的情绪在城市里是不变的幸福检测仪仍在开发中,所以判断一个人的幸福有可能会出错。一天深夜,当所有市民都顺利回家后,政府请Bogdan叔叔(全国最好的程序员)检查收集到的幸福指数是否正确。Bogdan叔叔成功地解决了这个问题。你也能做到吗?更正式地说,你需要检查:“有没有可能,在所有人都回家后,每个城市i的幸福指数都恰好等于hi”。输入第一行包含一个整数t (1 < t < 10000)——测试用例的数量。每个测试用例的第一行包含两个整数n和m (1 < n < 105;0 < m < 10°)-城市和公民的数量。每个测试用例的第二行包含n个整数p1,P2,,Pn(0≤pi < m;P1 + p2 +。+ pn = m),其中p;是居住在第i个城市的人数。第三行包含n个整数h1, h2,, hn(-10°< h;< 10°),其中h;计算出的幸福指数是第i个城市吗接下来的n - 1行包含道路的描述,每行一个。每行包含两个整数x;和yi (1 S xi, yi S n;和y;是由第i条公路连接的城市吗?可以保证所有测试用例的n的和不超过2 - 105。输出对于每个测试用例,如果收集的数据正确,则打印YES,否则打印NO。在任何情况下,都可以打印YES或NO中的字符。

Examples

input

Copy

2
7 4
1 0 1 1 0 1 0
4 0 0 -1 0 -1 0
1 2
1 3
1 4
3 5
3 6
3 7
5 11
1 2 5 2 1
-11 -2 -6 -2 -1
1 2
1 3
1 4
3 5

output

Copy

YES
YES

input

Copy

2
4 4
1 1 1 1
4 1 -3 -1
1 2
1 3
1 4
3 13
3 3 7
13 1 4
1 2
1 3

output

Copy

NO
NO

题解:
首先我们应该明白如果从根节点开始考虑的话,不确定的状态太多,不好考虑,所以应该从叶子节点考虑

对于题意来说不满足的情况有这么几种,

1.(子树城市居民数 + 城市心情值)% 2 == 1 (假设居民心情全为正的或全为负的,一个人心情变化,变化结果就是2)

2.假如说y是x的子节点,那么y的市民好心情数,肯定不能大于x(因为居民回家途中心情只可能变坏,不可能变好)

3.一个城市居民好心情数目,应该 = (子树城市居民数 + 城市心情值)/2 ,人数不能小于0

4,同理坏心情数目也不能小于0

剩下就是很完美的代码实现,非常简洁(只能说大佬的代码能力和常人确实不是一个级别)

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
#define int long long
vector<int> p[100050];
int good[100050];
int son[100050];
int h[100050];
int a[100050];
int f;
void dfs(int x,int fa)
{
	son[x] = a[x];
	int s = 0;
	for(auto ne:p[x])
	{
		if(ne == fa)
		continue;
		dfs(ne,x);
		son[x] += son[ne];
		s += good[ne];
	}
	good[x] = (son[x] + h[x])/2;
	if(abs(son[x] + h[x])%2 == 1||s > good[x] || good[x] < 0||son[x] - good[x] < 0)
	{
		f = 1;
	}
}
void solve()
{
	f = 0;
	int n,m;
	cin >> n >> m;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i];
	}
	for(int i = 1;i <= n;i++)
	{
		cin >> h[i];
	}
	for(int i = 1;i < n;i++)
	{
		int l,r;
		cin >> l >> r;
		p[l].push_back(r);
		p[r].push_back(l); 
	} 
	dfs(1,1);
	if(f)
	{
		cout <<"NO\n";
	}
	else
	{
		cout <<"YES\n";
	}
	for(int i = 1;i <= n;i++)
	{
		p[i].clear();
		son[i] = 0;
		good[i] = 0;
	}
}


signed main()
{
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
	int t = 1;
	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【软考:软件设计师】 4 计算机组成与体系结构(三)计算机安全 | 加密技术

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于软考中级&#xff1a;软件设计师系列专栏,本专栏服务于软考中级的软件设计师考试,包括不限于知识点讲解与真题讲解两大部分,并且提供电子教材与电子版真题,关注私聊即可 …

服务(第二篇)LAMP

一、编译安装apache ①关闭防火墙&#xff0c;将安装Apache所需软件包传到/opt目录下 systemctl stop firewalld.service setenforce 0 [rootxxx opt]# ls apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2 ②安装环境依赖包 yum -y install gcc gcc-c mak…

专业排名全美top6|建筑学硕士学历CSC获批顺利赴美

E老师人文社科背景&#xff0c;二本院校任教&#xff0c;硕士毕业&#xff0c;没有英文文章&#xff0c;且申请周期只有一个月。据此我们提出&#xff0c;以赶上CSC申报为前提&#xff0c;尽量申请美国综合或者专业排名靠前的学校。最终我们助E老师获得美国专业排名TOP6的弗吉尼…

六个阶段形成CRM销售漏斗,优点有哪些

CRM销售漏斗是反映机会状态以及销售效率的重要的销售管理模型。对企业来说&#xff0c;CRM销售漏斗是一个必不可少的工具。通过销售漏斗&#xff0c;企业可以跟踪和分析客户旅程的每个阶段&#xff0c;并制定相应的销售战略。下面来说说&#xff0c;什么是CRM销售漏斗&#xff…

高频PCB电路设计常见的66个问题

随着电子技术快速发展&#xff0c;以及无线通信技术在各领域的广泛应用&#xff0c;高频、高速、高密度已逐步成为现代电子产品的显著发展趋势之一。信号传输高频化和高速数字化&#xff0c;迫使PCB走向微小孔与埋/盲孔化、导线精细化、介质层均匀薄型化&#xff0c;高频高速高…

Redis消息队列实现异步秒杀

Redis秒杀优化 改进秒杀业务&#xff0c;提高并发性能 需求&#xff1a; 1.新增秒杀优惠券的同时&#xff0c;将优惠券的信息保存到redis中 2.基于Lua脚本&#xff0c;判断秒杀库存&#xff0c;一人一单&#xff0c;决定用户是否抢购成功 3.如果抢购成功&#xff0c;将优惠…

Android系统启动流程--init进程的启动流程

这可能是个系列文章&#xff0c;用来总结和梳理Android系统的启动过程&#xff0c;以加深对Android系统相对全面的感知和理解&#xff08;基于Android11&#xff09;。 1.启动电源&#xff0c;设备上电 引导芯片代码从预定义的地方&#xff08;固化在ROM&#xff0c;全称Read …

hive 入门 一般用于正式环境 修改元数据(二)

安装配置可参考 https://blog.csdn.net/weixin_43205308/article/details/130020674 1、如果启动过derby&#xff0c;最小初始化过 在安装路径下删除 derby.log metastore_db rm -rf derby.log metastore_db此处省略安装mysql数据库 2、配置MySQL 登录mysql mysql -uroot …

EightCap易汇:外汇投资入门需要了解哪些必要知识?

外汇市场是国际投资市场&#xff0c;日内交易量巨大&#xff0c;盈利机会极多。外汇是一种含有杠杆的投资产品&#xff0c;杠杆带来了高收益&#xff0c;也会带来高风险&#xff0c;对于外汇新手来说存在一定难度。新手投资者要如何交易&#xff0c;才能抓住外汇市场的盈利机会…

C++标准库 -- 关联容器 (Primer C++ 第五版 · 阅读笔记)

C标准库 -- 关联容器(Primer C 第五版 阅读笔记&#xff09;第11章 关联容器------(持续更新)11.1、使用关联容器11.2、关联容器概述11.3、关联容器操作11.4、无序容器第11章 关联容器------(持续更新) 关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和…

助力AI语音开发者的社区-语音之家

语音之家简介 语音之家成立于2021年4月&#xff0c;是一家助力AI语音开发者的社区&#xff0c;我们希望通过知识传播、在线学习、资源分享、各类活动等方式提供全生命周期的服务&#xff0c;帮助全球的AI语音开发者获得成长&#xff0c;洞见AI语音技术领域的发展。目前&#x…

TiDB实战篇-TiDB Lightning 导入数据

简介 使用TiDB Lightning 导入数据。 原理 TiKV进入导入模式 它是使用物理导入的模式&#xff0c;将SQL文件直接导入到TiKV中&#xff0c;它是一种初始化的导入&#xff0c;也就是说目标的数据库和表都是不能够存在的&#xff08;注意事项&#xff0c;在这种方式导入的时候T…

论文笔记 U-Net: Convolutional Networks for Biomedical Image Segmentation

摘要&#xff1a;人们普遍认为&#xff0c;深度网络的成功训练需要数千个带注释的训练样本。在本文中&#xff0c;我们提出了一种网络和训练策略&#xff0c;该策略依赖于大量使用数据增强来更有效地使用可用的注释样本。该体系结构包括用于捕获上下文的收缩路径和用于实现精确…

计算机组件介绍

1. CPU 1.1 主频 1.2 CPU缓存 注&#xff1a;越高越好 2. Memory 注&#xff1a;只有内存是主存&#xff08;因为CPU只能和内存打交道&#xff09;&#xff0c;硬盘这种就是外存&#xff08;因为硬盘太慢了&#xff0c;跟不上cpu的运行速度&#xff09; 3. I/O 注&#xff1a;输…

Segment Anything论文翻译,SAM模型,SAM论文,SAM论文翻译;一个用于图像分割的新任务、模型和数据集;SA-1B数据集

【论文翻译】- Segment Anything / Model / SAM论文 论文链接&#xff1a; https://arxiv.org/pdf/2304.02643.pdfhttps://ai.facebook.com/research/publications/segment-anything/ 代码连接&#xff1a;https://github.com/facebookresearch/segment-anything 论文翻译&…

微软 AI 作图上线完全免费,“奖励自己”可提升速度

ChatGPT 的横空出世应该已经让大家意识到了 AI 的恐怖。 称不上啥都能干&#xff0c;但给东西它真学&#xff0c;学得还比你快。 最近一段时间 AI 在作图领域又一次人气暴涨。 什么小姐姐写真、突破时间线的历史古图、甚至是抽象的表情包都可能源于 AI 之手。 看着手痒想玩玩…

滴滴滴,请看MYSQL事务的四大特征(ACID)的实现原理:晓其原理而通其实现。

一.什么是事务的四特征 原子性&#xff08;Atomicity&#xff0c;或称不可分割性&#xff09;一致性&#xff08;Consistency&#xff09;隔离性&#xff08;Isolation&#xff09;持久性&#xff08;Durability&#xff09; 接下来&#xff0c;我们将对四大特性的具体概念以及…

本地快速搭建Kubernetes单机版实验环境(含问题解决方案)

Kubernetes是一个容器编排系统&#xff0c;用于自动化应用程序部署、扩展和管理。本指南将介绍Kubernetes的基础知识&#xff0c;包括基本概念、安装部署和基础用法。 一、什么是Kubernetes&#xff1f; Kubernetes是Google开发的开源项目&#xff0c;是一个容器编排系统&…

长沙基层公务员待遇调查结果

之前发放了1000份调查问卷&#xff0c;统计过长沙各个行业&#xff08;其中一半是信息产业从业人员&#xff09;的待遇情况&#xff0c;发现很多人对长沙公务员&#xff08;包含有编制/合同工&#xff09;的待遇很感兴趣。我随手翻了翻几个基层政府单位的财政决算公开说明&…

MySQL笔记2

MySQL笔记2一、CRUD操作1.修改数据&#xff1a;update2.删除数据&#xff1a;delete二、数据库中表的约束1.非空约束 not null2.唯一性约束 unique3.主键约束 primary key4.外键约束三、索引1**什么是索引**&#xff1f;2**MySQL中最经典的两种存储引擎**3**为何需要索引**&…