题意

给一棵\(n\)节点的树,每个节点有\(a[i]\)个人住,他们从\(1\)号节点回家,回家路上可能从开心的状态变成不开心的状态(但不可以由不开心变为开心),每个节点有个探测器,会探测经过该节点开心的人数减不开心的人数,而预期值为\(h[i]\),问是否可能存在一种情况,使得所有节点的探测值等于真实值

分析

先想一下思路:我们可以发现叶子节点的人数开心人数和不开心人数,开心人数一定是从\(1\)号节点一直开心走回家的,不开心的人可能在路中间是开心的,那么我们不妨将题目转换为每个人从家出发到\(1\)号节点,他可能一开始是不开心的,他可以从不开心变为开心,但不会从开心变为不开心,那么对于一个节点,统计它的儿子节点的开心人数和不开心人数,然后不妨设该节点的所有人都是不开心,设\(x\)为开心的人数,\(y\)为不开心的人数,\(tot\)为经过该节点的总人数那么有方程

\[x+y=tot
\\
x-y=h[i]
\]

然后判断即可

#pragma GCC optimize(3, "Ofast", "inline")

#include <bits/stdc++.h>

#define start ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
#define int ll
#define ls st<<1
#define rs st<<1|1
#define pii pair<int,int>
#define rep(z, x, y) for(int z=x;z<=y;++z)
#define repd(z, x, y) for(int z=x;z>=y;--z)
#define com bool operator<(const node &b)const
using namespace std;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
const int maxn = (ll) 3e5 + 5;
const int mod = 998244353;
const int inf = 0x3f3f3f3f;
int T = 1;
vector<int> v[maxn];
int a[maxn];
int h[maxn];
bool flag; pii dfs(int now, int pre) {
if (!flag)
return {0, 0};
pii p = {0, a[now]};
for (auto &to:v[now]) {
if (to == pre)
continue;
pii tmp = dfs(to, now);
p.first += tmp.first;
p.second += tmp.second;
}
int x = p.first + p.second + h[now];
if (x & 1) {
flag = false;
return {0, 0};
}
x /= 2;
if (x < p.first || x > p.first + p.second) {
flag = false;
return {0, 0};
}
return pii{x, p.first + p.second - x};
} void solve() {
int n, m;
cin >> n >> m;
rep(i, 1, n) {
cin >> a[i];
v[i].clear();
}
rep(i, 1, n)cin >> h[i];
rep(i, 1, n - 1) {
int x, y;
cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
flag = true;
dfs(1, 0);
if (flag)
cout << "YES\n";
else
cout << "NO\n";
} signed main() {
start;
cin >> T;
while (T--)
solve();
return 0;
}

CodeForces 1388C Uncle Bogdan and Country Happiness的更多相关文章

  1. Codeforces Round #660 (Div. 2) Uncle Bogdan and Country Happiness dfs

    题目链接:Uncle Bogdan and Country Happiness 题意: t组输入,每组数据输入如下 首先一个n代表有n个城市,所有城市总人数为m,后面输入pi表示第i个城市的居住人数, ...

  2. Codeforces Round #660 (Div. 2) C. Uncle Bogdan and Country Happiness (DFS)

    题意:有\(n\)个人,每个人居住在某个节点,所有人都在节点\(1\)上班,下班后沿着最短路径回家,在回家途中心情可能会变差(心情只会变差不会变好),每个节点都有一个开心值,开心值等于所有经过时的好心 ...

  3. 【CodeForces】983 E. NN country 树上倍增+二维数点

    [题目]E. NN country [题意]给定n个点的树和m条链,q次询问一条链(a,b)最少被多少条给定的链覆盖.\(n,m,q \leq 2*10^5\). [算法]树上倍增+二维数点(树状数组 ...

  4. Codeforces Round #660 (Div. 2) A、B、C题解

    A. Captain Flint and Crew Recruitment #构造 题目链接 题意 定义一类正整数,能够被\(p*q\)表示,其中\(p.q(1<p<q)\)均为素数,称之 ...

  5. Codeforces 894.D Ralph And His Tour in Binary Country

    D. Ralph And His Tour in Binary Country time limit per test 2.5 seconds memory limit per test 512 me ...

  6. Codeforces Round #569 (Div. 2) 题解A - Alex and a Rhombus+B - Nick and Array+C - Valeriy and Dequ+D - Tolik and His Uncle

    A. Alex and a Rhombus time limit per test1 second memory limit per test256 megabytes inputstandard i ...

  7. 【Codeforces 1181E】A Story of One Country (Easy & Hard)(分治 & set)

    Description 在一个二维平面上有若干个矩形.定义一个矩形的(或有边在无限远处)区域为符合条件的条件为: 这个区域仅包含一个矩形,且不能使边界穿过任何一个矩形的内部. 这个区域可以用一个水平或 ...

  8. 【codeforces 983E】NN country

    Description In the NN country, there are n cities, numbered from 1 to n, and n−1 roads, connecting t ...

  9. Codeforces Round #567 (Div. 2) E2 A Story of One Country (Hard)

    https://codeforces.com/contest/1181/problem/E2 想到了划分的方法跟题解一样,但是没理清楚复杂度,很难受. 看了题解觉得很有道理,还是自己太菜了. 然后直接 ...

  10. Codeforces 983E - NN country(贪心+倍增优化)

    Codeforces 题面传送门 & 洛谷题面传送门 一道(绝对)偏简单的 D1E,但是我怕自己过若干年(大雾)忘了自己的解法了,所以过来水篇题解( 首先考虑怎么暴力地解决这个问题,不难发现我 ...

随机推荐

  1. 去掉谷歌/新版Edge 浏览器的禁用扩展提示

    简介 你打开是谷歌/新版Edge浏览器的时候是不是总发现右上角有个提示?请禁用/停用以开发者模式运行的扩展程序?每次打开都有一个小框框,让人很烦? 接下来让我们使用 dll大法 来解决这个问题! 步骤 ...

  2. SpringMVC 解决中文乱码问题以及前后端Json格式数据交互的测试

    1.今日遇到的报错: 跳转网页出现404原因: 1.检查project structure里面的webapp路径是否正确: 2.检查project structure里的artifaccts里的WEB ...

  3. 一次 HPC 病毒感染与解决经历

    周一的时候,有同事反馈说,HPC 的项目报告路径正在不断产生 *.exe 和 *.pif 文件,怀疑是不是被病毒感染! 收到信息,第一时间进去目录,的确发现该目录每个几秒钟就自动生成一个 *.exe ...

  4. go 实现ringbuffer以及ringbuffer使用场景介绍

    ringbuffer因为它能复用缓冲空间,通常用于网络通信连接的读写,虽然市面上已经有了go写的诸多版本的ringbuffer组件,虽然诸多版本,实现ringbuffer的核心逻辑却是不变的.但发现其 ...

  5. 1. Spring相关概念

    1. 初始 Spring ‍ 1.1 Spring 家族 ‍ 官网:​https://spring.io,从官网我们可以大概了解到: Spring 能做什么:用以开发 web.微服务以及分布式系统等, ...

  6. OOP4-6题目集总结

    4-6次题目集,从集合框架,正则表达式,类的继承与多态三个方面展开,在帮助我们了解java常用的工具(集合框架,正则表达式)的同时让我们学着利用类与类之间的关系来减少耦合,第六次题目集侧重于类的继承与 ...

  7. PHP支付接口签名生成数据

    <?php //作者主页 https://www.woailunwen.com $pay_memberid = '商户号'; $pay_orderid = '订单号'; $pay_amount ...

  8. 【Kubernetes】yaml文件编写 -- 持续更新

    K8S通过yaml格式的声明式API与资源对象交互 API版本由apiVersion字段指定,API对象类型由kind字段指定 除此之外,每个API对象有三大类属性: metadata:元数据 spe ...

  9. 瞬间抠图!揭秘 ZEGO 绿幕抠图算法背后的技术

    抠图是图像处理中最常见的操作之一,指的是将图像中需要的部分从画面中精确的提取出来. 抠图的主要功能是为了后期的合成做准备.在 Photoshop 中,抠图的方法有很多种,最常见的有通道抠图.蒙版抠图. ...

  10. 【阅读笔记】低照度图像增强-《Fast efficient algorithm for enhancement of low lighting video》

    本文介绍的是一种比较实用的低照度图像增强效果很好的方法,Xuan Dong论文<Fast efficient algorithm for enhancement of low lighting ...