题目链接:Uncle Bogdan and Country Happiness

题意:

t组输入,每组数据输入如下

首先一个n代表有n个城市,所有城市总人数为m,后面输入pi表示第i个城市的居住人数,后面的hi表示经过这个城市的人中  开心的人数-伤心的人数

后面输入n-1条无向边,每条边的长度都一样

这个图的结构是树形结构,且刚开始所有人都在1点,也就是根节点。他们会走最短路径去回到他们居住的城市

所有人在走的路上都可能由好心情变成坏心情,但是坏心情不会变成好心情,且在城市内这个变化不会发生

题目让你判断给出的hi是否全部正确,是就输出YES

题解:

因为我们不知道经过某个城市的总人数,所以我们需要从树的根节点开始dfs,伤心人数用bad来表示,开心人数用good来表示,totali表示经过i点的总人数

我们得到两个方程式

good+bad=totali

good-bad=hi

这样我们可以求出来good和bad,但是我们还需要去判断这个good正确不正确,因为所有人在路上都可能由好心情变成坏心情,所以说越靠近根节点,那么good的数量肯定会更大,所以我们统计一下子节点算出来的good的和ans,用ans和此节点算出来的good作比较,如果ans>good那就肯定不行

 

还要判断一下abs(hi)<=total

代码:

#include<stack>
#include<queue>
#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#define fi first
#define se second
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
const int mod=1e9+7;
const double eps=1e-8;
ll p[maxn],h[maxn],flag,total[maxn],good[maxn];
vector<ll>w[maxn];
void add_edge(ll x,ll y)
{
w[x].push_back(y);
w[y].push_back(x);
}
void dfs(ll x,ll fx)
{
ll len=w[x].size(),sum=0;
total[x]=p[x];
for(ll i=0;i<len;++i)
{
ll y=w[x][i];
if(y==fx) continue;
dfs(y,x);
total[x]+=p[y];
sum+=good[y];
if(flag) return;
}
p[x]=total[x];
if(flag) return;
//if(total[x]==0) return; 之前认为total等于0就不需要判断,没想不行
//因为题目让你判断hi的值是否全部正确,就算total等于0,我们也需要去判断。。。
if(abs(h[x])>total[x]) {
flag=1;
return;
}
if((h[x]+total[x])%2==0 && ((h[x]+total[x])/2)>=h[x])
{ //printf("%d******%d\n",x,total[x]);
good[x]=(h[x]+total[x])/2;
if(good[x]<sum)
{
flag=1;
return;
}
}
else
{
flag=1;
}
return;
}
int main()
{
ll t;
scanf("%lld",&t);
while(t--)
{
ll n,m;
flag=0;
memset(good,0,sizeof(good));
scanf("%lld%lld",&n,&m);
for(ll i=1;i<=n;++i)
w[i].clear();
for(ll i=1;i<=n;++i)
scanf("%lld",&p[i]);
for(ll i=1;i<=n;++i)
scanf("%lld",&h[i]);
for(ll i=1;i<n;++i)
{
ll x,y;
scanf("%lld%lld",&x,&y);
add_edge(x,y);
}
dfs(1,0);
if(flag || total[1]!=m)
{
printf("NO\n");
}
else
{
printf("YES\n");
}
}
return 0;
}

Codeforces Round #660 (Div. 2) Uncle Bogdan and Country Happiness dfs的更多相关文章

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

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

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

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

  3. Codeforces Round #660 (Div. 2) Captain Flint and Treasure 拓扑排序(按照出度、入读两边拓扑排序)

    题目链接:Captain Flint and Treasure 题意: 一种操作为 选一个下标 使得ans+=a[i] 且 把a[b[i]]+a[i]   要求每个下标都进行一种这样的操作,问怎么样的 ...

  4. Codeforces Round #660 (Div. 2) A. Captain Flint and Crew Recruitment、Captain Flint and a Long Voyage

    题目链接:Captain Flint and Crew Recruitment 题意: t组输入,每一组输入一个n.这里我们说一下题目定义的近似质数概念: "如果可以将正整数x表示为p⋅q, ...

  5. Codeforces Round #660 (Div. 2)

    A. Captain Flint and Crew Recruitment 题意:定义了一种数(接近质数),这种数可以写成p*q并且p和q都是素数,问n是否可以写成四个不同的数的和,并且保证至少三个数 ...

  6. Codeforces Round #381 (Div. 1) B. Alyona and a tree dfs序 二分 前缀和

    B. Alyona and a tree 题目连接: http://codeforces.com/contest/739/problem/B Description Alyona has a tree ...

  7. Codeforces Round #290 (Div. 2) B. Fox And Two Dots dfs

    B. Fox And Two Dots 题目连接: http://codeforces.com/contest/510/problem/B Description Fox Ciel is playin ...

  8. Codeforces Round #394 (Div. 2) E. Dasha and Puzzle(dfs)

    http://codeforces.com/contest/761/problem/E 题意:给出一棵树,现在要把这棵树上的结点放置在笛卡尔坐标上,使得每一条边与x轴平行或者与y轴平行.输出可行解,即 ...

  9. Codeforces Round #306 (Div. 2), problem: (B) Preparing Olympiad【dfs或01枚举】

    题意: 给出n个数字,要求在这n个数中选出至少两个数字,使得它们的和在l,r之间,并且最大的与最小的差值要不小于x.n<=15 Problem - 550B - Codeforces 二进制 利 ...

随机推荐

  1. Hash Tables and Hash Functions

    Reference: Compuer science Introduction: This computer science video describes the fundamental princ ...

  2. DHCP最佳实践(二)

    这是Windows DHCP最佳实践和技巧的最终指南. 如果您有任何最佳做法或技巧,请在下面的评论中发布它们. 在本指南(二)中,我将分享以下DHCP最佳实践和技巧. 从DHCP作用域中排除IP 了解 ...

  3. 2019 Java开发利器Intellij IDEA安装、配置和使用

    进入Intellij IDEA的官网,选择电脑对应的合适版本进行下载,这儿我选择的是Intellij IDEA的社区版,安装旗舰版可去网上找相应的教程. Intellij IDEA的官网:https: ...

  4. me21n增强BADI:ME_PROCESS_PO_CUST之process_account

    当实施ME_PROCESS_PO_CUST这个badi来增强ME21N的时候,用了到方法process_account,既对ME21N的行项目的科目分配做增强.主要用到如下类: IF_PURCHASE ...

  5. 1V升5V芯片,1V升5V电路图规格书

    如果需要1V输入的话,可以看到PW5100的最低低压输入0.7V,就可以达到要求了. 同时PW5100也具有较大的输入开关电流1.5A,可以满足输出的要求和功能. 对于1V的供电来说,由于电压太低,我 ...

  6. Linux学习安装

    Linux学习安装 服务器指的是网络中能对其他机器提供某些服务的计算机系统,相对普通PC, 服务器指的是高性能计算机,稳定性.安全性要求更高 linux安装学习 1.虚拟机 一台硬件的机器 安装vmw ...

  7. Py其他内置函数,文件修改

    其他内置函数 1.abs函数,取绝对值 print(abs(-1)) 2.all函数,判断可迭代对象是否全为真,有假直接假 假:0,'',None print(all([1,2,'1'])) prin ...

  8. 转 14 jmeter性能测试实战--数据库MySQL

    14 jmeter性能测试实战--数据库MySQL   需求 测试用户表(对用户表select操作) 测试步骤 1.MySQL驱动下载并安装. 2.测试计划面板点击"浏览"按钮,将 ...

  9. win server 2019服务器的iis配置以及网站的简单发布

    1.首先远程连接到服务器 2.打开服务器管理器 3添加角色和功能 4.安装类型:选择基于角色或基于功能的安装  →服务器角色:从服务器池中选择服务器 5.服务器角色选择Web服务器(iis) 6.功能 ...

  10. goroutine 分析 协程的调度和执行顺序 并发写 run in the same address space 内存地址 闭包 存在两种并发 确定性 非确定性的 Go 的协程和通道理所当然的支持确定性的并发方式(

    package main import ( "fmt" "runtime" "sync" ) const N = 26 func main( ...