Codeforces Round #660 (Div. 2) C. Uncle Bogdan and Country Happiness (DFS)
2024-09-07 02:47:19
题意:有\(n\)个人,每个人居住在某个节点,所有人都在节点\(1\)上班,下班后沿着最短路径回家,在回家途中心情可能会变差(心情只会变差不会变好),每个节点都有一个开心值,开心值等于所有经过时的好心情人数减去差心情人数,现在给你每个城市的开心值,问是否满足情况.
题解:这题真的好难想啊,假设第\(i\)个城市经过的好心情的人数是\(good[i]\),差心情是\(bad[i]\),经过的总人数是\(sum[i]\),题目所要求的开心值是\(h[i]\),那么\(good[i]+bad[i]=sum[i]\),\(good[i]-bad[i]=h[i]\),所以得出\(2*good[i]=sum[i]+h[i]\),这要\(good[i]\)合法,就能满足条件,对于\(good[i]\),首先是整数,所以\((h[i]+sum[i])mod\ 2=0\),其次\(0\le good[i]\le sum[i]\),最后因为心情只会变好不会变坏,所以我们统计一下\(i\)下面子节点的\(good\)个数\(s\),满足\(s\le good[i]\)即可.具体实现过程是一个dfs,从\(1\)号节点不断向下搜.
代码:
int t;
int n,m;
int p[N];
int h[N];
vector<int> V[N];
int sum[N],good[N];
bool flag; void dfs(int u,int fa){
sum[u]=p[u];
int s=0;
for(auto w:V[u]){
if(w==fa) continue;
dfs(w,u);
sum[u]+=sum[w];
s+=good[w];
}
int now=h[u]+sum[u];
if(now&1){
flag=false;
return;
}
good[u]=now/2;
if(good[u]<0 || good[u]>sum[u] || s>good[u]){
flag=false;
return;
}
} int main() {
//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
scanf("%d",&t);
while(t--){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%d",&p[i]);
V[i].clear();
}
for(int i=1;i<=n;++i){
scanf("%d",&h[i]);
}
for(int i=1;i<=n-1;++i){
int u,v;
scanf("%d %d",&u,&v);
V[u].pb(v);
V[v].pb(u);
}
flag=true;
dfs(1,0);
if(flag) puts("YES");
else puts("NO"); } return 0;
}
最新文章
- maven添加jetty插件
- JavaScript--模块化编程(笔记)
- Java 8 VM GC Tuning Guide Charter2
- Effective C++学习笔记 条款04:确定对象被使用前已先被初始化
- offie2010设置前两页和后面显示不同页码的方法
- 查看oracle数据库的大小和空间使用情况
- Beanstalkd
- 线程queue
- MySQL中order by排序时,数据存在null咋办
- Python的Argparse模块是什么?(未完)
- 移除Excel工作表密码保护小工具含C#源代码
- Spring Boot入门 and Spring Boot与ActiveMQ整合
- JavaScript面试技巧(一):基础知识
- jquery.cookie用法及其注意点
- html回顾随笔JS(*^__^*)
- 【Java并发编程】:线程中断
- 完整的POM文档内容
- ieee80211 phy1: Failed to select rate control algorithm
- CentOS iptables防火墙的基本应用讲解
- JVM内存区域解析
热门文章
- REUSE_ALV_FIELDCATALOG_MERGE函数
- BAPI创建PO,禁止净价信息更新
- Spring Validation 验证
- 24V转5V芯片,高输入电压LDO线性稳压器
- mysqlG基于TID模式同步报错 (Last_IO_Errno: 1236)
- 消息队列之rabbitmq学习使用
- JavaScript中的构造函数和原型!
- chain issues incorrect order,EXtra certs,Contains anchor
- JVM 详解,大白话带你认识 JVM
- Jenkins免密码登录