4027. [HEOI2015]兔子与樱花【树形DP】
Description
很久很久之前,森林里住着一群兔子。有一天,兔子们突然决定要去看樱花。兔子们所在森林里的樱花树很特殊。樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它看成一个有根树结构,其中0号节点是根节点。这个树的每个节点上都会有一些樱花,其中第i个节点有c_i朵樱花。樱花树的每一个节点都有最大的载重m,对于每一个节点i,它的儿子节点的个数和i节点上樱花个数之和不能超过m,即son(i) + c_i <= m,其中son(i)表示i的儿子的个数,如果i为叶子节点,则son(i) = 0
Input
第一行输入两个正整数,n和m分别表示节点个数和最大载重
Output
一行一个整数,表示最多能删除多少节点。
Sample Input
0 2 2 2 4 1 0 4 1 1
3 6 2 3
1 9
1 8
1 1
0
0
2 7 4
0
1 5
0
Sample Output
HINT
对于100%的数据,1 <= n <= 2000000, 1 <= m <= 100000, 0 <= c_i <= 1000
很容易发现,每个点删掉后对父亲的贡献为Son[x]+a[x]-1
而你删除点x,最多会对Father[x]产生影响,再往上的节点很容易发现就不会受到影响了
(画个图感性体会一下什么都好说)
所以对于点x来说,按儿子Cost从小到大删除
因为如果你不删除儿子的话,最好的情况就是可以在下一步删除x
那样还不如删除儿子,反正儿子要删除的话至少会删除一个
当然如果所有儿子都没法删除那就没办法了QvQ
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define N (2000000+100)
using namespace std;
struct node
{
int to,next;
}edge[N*];
int a[N],b[N],Son[N],Father[N],Cost[N];
int head[N],num_edge,n,m,p,ans,x; void add(int u,int v)
{
edge[++num_edge].next=head[u];
edge[num_edge].to=v;
head[u]=num_edge;
} void Build(int x)
{
for (int i=head[x];i!=;i=edge[i].next)
if (edge[i].to!=Father[x])
{
Father[edge[i].to]=x;
Son[x]++;
Build(edge[i].to);
}
Cost[x]=Son[x]+a[x];
} void Dfs(int x)
{
for (int i=head[x];i!=;i=edge[i].next)
if (edge[i].to!=Father[x])
Dfs(edge[i].to);
int cnt=;
for (int i=head[x];i!=;i=edge[i].next)
if (edge[i].to!=Father[x])
b[++cnt]=Cost[edge[i].to]-;
sort(b+,b+cnt+);
for (int i=;i<=cnt;++i)
if (Cost[x]+b[i]<=m)
Cost[x]+=b[i],ans++;
} int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;++i)
scanf("%d",&a[i]);
for (int i=;i<=n;++i)
{
scanf("%d",&p);
for (int j=;j<=p;++j)
{
scanf("%d",&x); x++;
add(x,i); add(i,x);
}
}
Build();
Dfs();
printf("%d",ans);
}
4027. [HEOI2015]兔子与樱花【树形DP】的更多相关文章
- BZOJ 4027: [HEOI2015]兔子与樱花 树上dp
4027: [HEOI2015]兔子与樱花 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- [BZOJ4027][HEOI2015]兔子与樱花 树形dp
Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接 ...
- 【bzoj4027】[HEOI2015]兔子与樱花 树形dp+贪心
题目描述 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接,我们可以把它 ...
- [bzoj4027][HEOI2015][兔子与樱花] (树形dp思想+玄学贪心)
Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接 ...
- 【BZOJ 4027】 4027: [HEOI2015]兔子与樱花 (贪心)
4027: [HEOI2015]兔子与樱花 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号 ...
- BZOJ 4027: [HEOI2015]兔子与樱花 贪心
4027: [HEOI2015]兔子与樱花 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号 ...
- BZOJ4027/LG4107 「HEOI2015」兔子与樱花 树形DP+贪心
问题描述 LG4107 题解 首先,我们可以直接令结点 \(x\) 的权值为 \(c[x]+son_x\) ,发现将 \(x,y\) 合并,相当于增加 \(c[x]+c[y]-1\) 的重量. 容易想 ...
- BZOJ 4027: [HEOI2015]兔子与樱花
贪心 #include<cstdio> #include<algorithm> using namespace std; int cnt,n,m,F[2000005],c[20 ...
- BZOJ4027: [HEOI2015]兔子与樱花 贪心
觉得是贪心,但是一开始不太肯定...然后就A了 一个点对它的父亲的贡献就是自己的权值加儿子的个数 #include<bits/stdc++.h> using namespace std; ...
随机推荐
- slf4j和log4j源代码解析以及详解
备注:下面所有代码以log4j为例 包结构 slf4j-api.jar对外提供api slf4j.log4j12.jar提供适配器 log4j.jar是log4j的jar slf4j初始化 获取ILo ...
- Extjs checkbox数值回显
昨天上午花了半天时间都在调 extjs的编辑页面里的CheckBox的回显问题,一直没搞定,毕竟我接触extjs才一个月不到,属于小白.先上个图: 这就是编辑页面的时候,需要的效果.然后我代码里是用了 ...
- java Date 当天时间戳处理
1. 代码 private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; private static Date ...
- AJAX-XMLHttpRequest和本地文件
网页中可以使用相对URL的能力通常意味着我们能使用本地文件系统来开发和测试HTML,并避免对Web服务器进行不必要的部署. 然而当使用XMLHttpRequest进行Ajax编程时,这通常是不行的. ...
- Ubuntu OpenJDK + Tomcat7 的安装
jdk1.7.0安装首先安装openjdk,安装命令如下图. 安装好之后检查jdk文件路径,如下图. 建立链接(ls),如下图. 成功之后,配置环境变量,并重新运行一下,如下图. 环境变量在文件最后面 ...
- 解决ie6、ie7下float为right换行的情况
IE6下有不少奇怪的Bug,今天就碰到一个,float:right换行bug,情况是并列的几个块级元素如div和span,一些设置了左浮动一些设置右浮动,一行的宽度足够放下所有的块级元素,但此时ie6 ...
- vue-cli中的webpack配置
编辑模式下显示正常,打开的时候不知道为啥排版有问题.segementfalut链接在这里 版本号 vue-cli 2.8.1 (终端通过vue -V 可查看) vue 2.2.2 webpack 2. ...
- JavaScript写九九乘法表
<script language=javascript> for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ document.write (i+&qu ...
- Eclipse 下载、安装、取消自动更新、设置编码、关联Tomcat
1.下载 (1)安装jdk 如果进行web开发,下载java se 版本的jdk即可,不需要像安装 java se 一样安装java ee(里面大多是接口和抽象类).关于java ee的依赖问题有两种 ...
- CSS深入理解之overflow(HTML/CSS)
简介 overflow看上去其貌不扬,其中蕴含的知识点还是很多的,有很多鲜为人知的特性表现. overflow基本属性值 1.visible(默认) 2.hidden 3.scroll 4.auto ...