[AT2304] [agc010_c] Cleaning
题目链接
AtCoder:https://agc010.contest.atcoder.jp/tasks/agc010_c
洛谷:https://www.luogu.org/problemnew/show/AT2304
Solution
窝yy了好久的dpQAQ
标算很巧妙:我们考虑算每条边被经过了多少次,这里把一个叶子节点到另一个叶子节点的取石子看成\(\rm travel\)。
首先选一个度数大于一的点作为根节点,然后我们分类讨论:
- 每个叶子节点上面的边\(cnt\)一定等于当前点的石子数。
- 非叶子节点上面的边可以这样算:因为每个非叶子节点的进入的次数等于出去的次数,并且这个点被取完了,也就是说\(\sum _{v\in edge_x} cnt_v=2v[x]\),那么我们就可以确定了。
算完这个之后就可以判无解了:
- 如果根节点不满足\(\sum cnt =2v[x]\)就无解。
- 如果某条边的\(cnt\)为负就无解。
- 如果某条边的\(cnt\)大于两端的\(v[x]\)的任意一个就无解。
#include<bits/stdc++.h>
using namespace std;
void read(int &x) {
x=0;int f=1;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;
for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}
void print(int x) {
if(x<0) putchar('-'),x=-x;
if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}
#define lf double
#define ll long long
#define end puts("NO"),exit(0)
const int maxn = 1e5+10;
const int inf = 1e9;
const lf eps = 1e-8;
int head[maxn],tot=1,cnt[maxn<<1],n,v[maxn],d[maxn],rt;
struct edge{int to,nxt;}e[maxn<<1];
void add(int u,int vv) {e[++tot]=(edge){vv,head[u]},head[u]=tot,d[vv]++;}
void ins(int u,int vv) {add(u,vv),add(vv,u);}
void dfs(int x,int fa) {
if(d[x]==1) return cnt[head[x]]=cnt[head[x]^1]=v[x],void();
int rm=v[x]<<1,t=0;
for(int i=head[x];i;i=e[i].nxt)
if(e[i].to!=fa) dfs(e[i].to,x),rm-=cnt[i],cnt[i]>v[x]?end,0:0;
else t=i;
if(!t) return ;
if(rm>v[x]||rm<0) end;
cnt[t]=cnt[t^1]=rm;
}
int main() {
read(n);for(int i=1;i<=n;i++) read(v[i]);
if(n==2) puts(v[1]==v[2]?"YES":"NO"),exit(0);
for(int i=1,x,y;i<n;i++) read(x),read(y),ins(x,y);
for(int i=1;i<=n;i++) if(d[i]!=1) {rt=i,dfs(i,0);break;}
int t=0;for(int i=head[rt];i;i=e[i].nxt) t+=cnt[i];
if(t!=v[rt]<<1) end;else puts("YES");
return 0;
}
[AT2304] [agc010_c] Cleaning的更多相关文章
- 贪心/构造/DP 杂题选做Ⅲ
颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...
- AT2304 Cleaning
AT2304 Cleaning 题意 一个树上每个节点有一些石子,每次只能选取两个叶子节点并将路径间的所有点上的石子数量减1,问是否能将所有石子取完. 思路 设 \(f_x\) 表示从 \(x\) 节 ...
- Atcoder Grand Contest 010 C - Cleaning 树贪心(伪)
C - Cleaning 题目连接: http://agc010.contest.atcoder.jp/tasks/agc010_c Description There is a tree with ...
- 【bzoj1672】[USACO2005 Dec]Cleaning Shifts 清理牛棚
题目描述 Farmer John's cows, pampered since birth, have reached new heights of fastidiousness. They now ...
- Coursera-Getting and Cleaning Data-week1-课程笔记
博客总目录,记录学习R与数据分析的一切:http://www.cnblogs.com/weibaar/p/4507801.html -- Sunday, January 11, 2015 课程概述 G ...
- Coursera-Getting and Cleaning Data-Week2-课程笔记
Coursera-Getting and Cleaning Data-Week2 Saturday, January 17, 2015 课程概述 week2主要是介绍从各个来源读取数据.包括MySql ...
- Coursera-Getting and Cleaning Data-Week3-dplyr+tidyr+lubridate的组合拳
Coursera-Getting and Cleaning Data-Week3 Wednesday, February 04, 2015 好久不写笔记了,年底略忙.. Getting and Cle ...
- Coursera-Getting and Cleaning Data-week4-R语言中的正则表达式以及文本处理
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Thursday, January 29, 2015 补上第四周笔记,以及本次课程总结. 第四周 ...
- 【BZOJ1672】[Usaco2005 Dec]Cleaning Shifts 清理牛棚 动态规划
[BZOJ1672][Usaco2005 Dec]Cleaning Shifts Description Farmer John's cows, pampered since birth, have ...
随机推荐
- Windows server 2008 IIS7发布asp.net mvc网站css、js脚本无法访问 问题解决
今天发布网站遇到一个感到很无语的问题,网站发布成功,浏览网站内容数据显示正常,就是没有样式,试了下脚本也是没有反应,如图效果: 接下来就是一顿苦找原因,检查iis设置.什么应用程序池.文件路径等各种检 ...
- 了解ASP.NET Core 依赖注入,看这篇就够了
DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET Core的DI实现以及对实例 ...
- OpenCL入门:(一:Intel核心显卡OpenCL环境搭建)
组装的电脑没带独立显卡,用的是CPU自带的核显,型号是Intel HD Graphics 530,关于显卡是否可以使用OpenCL,可以下载GPU-Z软件查看. 本文在Windows 10 64位系统 ...
- Sublime Text3添加右键
在Sublime Text3安装目录下新建一个文件 sublime_addright.inf 文件内容: [Version] Signature="$Windows NT$" [D ...
- [转载] Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例
1.环境准备 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0.33 c4 -&g ...
- [线性DP][codeforces-1110D.Jongmah]一道花里胡哨的DP题
题目来源: Codeforces - 1110D 题意:你有n张牌(1,2,3,...,m)你要尽可能多的打出[x,x+1,x+2] 或者[x,x,x]的牌型,问最多能打出多少种牌 思路: 1.三组[ ...
- Qt应用程序重启
重启应用程序是一种常见的操作,在Qt中实现非常简单,需要用到QProcess类一个静态方法: // program, 要启动的程序名称 // arguments, 启动参数 bool startDet ...
- hibernate.hbm.xml文件配置入门小结(1)
在Hibernate中,各表的映射文件xxx.hbm.xml可以通过工具生成,例如在使用MyEclipse开发时,它提供了自动生成映射文件的工具. hibernate.hbm.xml文件的基本结构如下 ...
- HTML5+Bootstrap 学习笔记 4
HTML5 <map> <area> 标签 <map> 标签定义客户端的图像映射.图像映射是带有可点击区域的图像. <area> 标签定义图像映射内部的 ...
- Java变量声明,实例化,问题
1.变量在输出前必须实例化,这是因为只有声明,没有分配内存空间 在这种情况下会报错 2.实例化后,尽管没有赋值,可能是默认了吧,但也不会输出null,什么也没有输出 上面的理解可能是错的,a赋值了,就 ...