AT2304 Cleaning

题意

一个树上每个节点有一些石子,每次只能选取两个叶子节点并将路径间的所有点上的石子数量减1,问是否能将所有石子取完。

思路

设 \(f_x\) 表示从 \(x\) 节点向上的路径条数,\(s_x\) 为子节点的 \(f\) 值的和,则有:

\[a_x=\frac{s_x-f_x}{2}+f_x\\
f_x=2a_x-s_x
\]

我们只需要保证以下条件即可:

  • 从子节点传上来的路径条数的最大值小于等于该点石头个数;
  • 向上传的路径条数不为负且小于等于该点石头数。

也就是说,在合法条件下,我们令能在子树内匹配的路径数尽量多,然后向上传路径。

可以证明,在满足上面两个条件下,总能构造出一种合法方案使这个点合法。

其他条件:

  • 子叶节点的 \(f_x=a_x\);

  • 根节点不能为子节点;

  • 若根节点的 \(f\) 值不为0,判定为无解。

实现

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cctype>
  5. #include<cstring>
  6. #include<cmath>
  7. using namespace std;
  8. inline int read(){
  9. int w=0,x=0;char c=getchar();
  10. while(!isdigit(c))w|=c=='-',c=getchar();
  11. while(isdigit(c))x=x*10+(c^48),c=getchar();
  12. return w?-x:x;
  13. }
  14. namespace star
  15. {
  16. const int maxn=1e5+10;
  17. int n,a[maxn],root;
  18. int ecnt,head[maxn],to[maxn<<1],nxt[maxn<<1],in[maxn],f[maxn];
  19. inline void addedge(int a,int b){
  20. to[++ecnt]=b,nxt[ecnt]=head[a],head[a]=ecnt;in[a]++;
  21. to[++ecnt]=a,nxt[ecnt]=head[b],head[b]=ecnt;in[b]++;
  22. }
  23. void dfs(int x,int fa){
  24. f[x]=in[x]==1?a[x]:(a[x]<<1);
  25. for(int i=head[x];i;i=nxt[i]){
  26. int u=to[i];
  27. if(u==fa)continue;
  28. dfs(u,x);
  29. f[x]-=f[u];
  30. if(f[u]>a[x]) puts("NO"),exit(0);
  31. }
  32. if(f[x]>a[x] or f[x]<0) puts("NO"),exit(0);
  33. }
  34. inline void work(){
  35. n=read();
  36. for(int i=1;i<=n;i++) a[i]=read();
  37. for(int i=1;i<n;i++) addedge(read(),read());
  38. if(n==2) return puts(a[1]==a[2]?"YES":"NO"),void();
  39. for(int i=1;i<=n;i++) if(in[i]!=1){root=i;break;}
  40. dfs(root,0);
  41. puts(f[root]?"NO":"YES");
  42. }
  43. }
  44. signed main(){
  45. star::work();
  46. return 0;
  47. }

AT2304 Cleaning的更多相关文章

  1. [AT2304] [agc010_c] Cleaning

    题目链接 AtCoder:https://agc010.contest.atcoder.jp/tasks/agc010_c 洛谷:https://www.luogu.org/problemnew/sh ...

  2. 【bzoj1672】[USACO2005 Dec]Cleaning Shifts 清理牛棚

    题目描述 Farmer John's cows, pampered since birth, have reached new heights of fastidiousness. They now ...

  3. Coursera-Getting and Cleaning Data-week1-课程笔记

    博客总目录,记录学习R与数据分析的一切:http://www.cnblogs.com/weibaar/p/4507801.html -- Sunday, January 11, 2015 课程概述 G ...

  4. Coursera-Getting and Cleaning Data-Week2-课程笔记

    Coursera-Getting and Cleaning Data-Week2 Saturday, January 17, 2015 课程概述 week2主要是介绍从各个来源读取数据.包括MySql ...

  5. Coursera-Getting and Cleaning Data-Week3-dplyr+tidyr+lubridate的组合拳

    Coursera-Getting and Cleaning Data-Week3 Wednesday, February 04, 2015 好久不写笔记了,年底略忙.. Getting and Cle ...

  6. Coursera-Getting and Cleaning Data-week4-R语言中的正则表达式以及文本处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Thursday, January 29, 2015 补上第四周笔记,以及本次课程总结. 第四周 ...

  7. 【BZOJ1672】[Usaco2005 Dec]Cleaning Shifts 清理牛棚 动态规划

    [BZOJ1672][Usaco2005 Dec]Cleaning Shifts Description Farmer John's cows, pampered since birth, have ...

  8. poj 2376 Cleaning Shifts

    http://poj.org/problem?id=2376 Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  9. POJ 2376 Cleaning Shifts(轮班打扫)

    POJ 2376 Cleaning Shifts(轮班打扫) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] Farmer ...

随机推荐

  1. 第五周 Spring框架

    一.Spring框架设计 Spring framework 6大模块 1.1 Spring AOP AOP: 面向切面编程 Spring 早期版本的核心功能,管理对象声明周期和对象装配 为了实现管理和 ...

  2. Kettle通过Http post请求webservice接口以及结果解析处理

    kettle中有两种方式请求webservice服务,一个是Web服务查询,但是这个有缺陷,无法处理复杂的需求,遇到这种情况就需要用Http post来处理了. 网上也有很多关于Http post请求 ...

  3. Lombok——一款Java构建工具,“懒人”必备!!(idea版)

    一.简介 Lombok 是一种 Jav 构建工具,可用来帮助开发人员消除 Java 的冗长代码,尤其是对于简单的 Java 对象(POJO).它是通过注解实现这一目的. 二.使用 1.在idea中安装 ...

  4. Qt中的布局浅析与弹簧的使用,以及Qt居中的两种方法

    1. 布局 为什么要布局: 布局之后窗口的排列是有序的 布局之后窗口的大小发生变化, 控件的大小也会对应变化 如果不对控件布局, 窗口显示出来之后有些控件的看不到的 布局是可以嵌套使用 常用的布局方式 ...

  5. QueryTable的使用以及错误

    1.QuerySeter的filter使用遇到的错误 1.1 Filter里的字段名和操作符要用双下划线."__" 不是" _",否则会被认为成是列名的一部分, ...

  6. Java8中一个极其强悍的新特性,很多人没用过(非常实用)

    Java8中有两个非常有名的改进,一个是Lambda表达式,一个是Stream.如果我们了解过函数式编程的话,都知道Stream真正把函数式编程的风格引入到了java中.这篇文章由简入繁逐步介绍Str ...

  7. 【模拟7.14】建造游乐园(play)

    这题是玄学的数论 首先考虑如何枚举偶数点度的图 可以考虑取出i-1个点 那么成图的数量为2^C(i-1,2) (原因单独取出的i点能平衡已建图中的奇数点,原因是某种性质....) 然后求带联通标号的欧 ...

  8. ORA-09817:Write to audit file failed

    ERROR: ORA-09817: Write to audit file failed. --这种错误基本是磁盘空间满了 问题描述:sqlplus / as sysdba登不上,报上述ora-098 ...

  9. 【原创】Ingress-Nginx-Controller的Metrics监控源码改造简析

    一.背景 目前我们的生产环境一层Nginx已经容器化部署,但是监控并不完善,我们期望其具有Ingress-Nginx-Controller组件上报监控的数据.这样可以建立请求全链路的监控大盘.有利于监 ...

  10. IPVS的ICMP报文处理-由内到外

    这里主要明与NAT/Masq转发模式相关的ICMP报文处理,但也会提及由于出错引发的IPVS系统主动发送的ICMP报文. 1.ICMP由外到内处理流程入口 入口函数ip_vs_in实质上挂载在netf ...