描述

curimit知道陶陶很喜欢吃苹果。于是curimit准备在陶陶生日的时候送给他一棵苹果树。

curimit准备了一棵这样的苹果树作为生日礼物:这棵苹果树有n个节点,每个节点上有c[i]个苹果,这棵树高度为h。

可是,当curimit把这棵树给陶陶看的时候,陶陶却说:“今年生日不收礼,收礼只收节点数减高度不超过k的苹果树。”这下curimit犯难了,curimit送来的树枝繁叶茂,不满足节点数-高度≤k。于是curimit决定剪掉一些枝条,使得修剪过后的树满足节点数-高度≤k,但是curimit又想保留尽量多的苹果数目。curimit想请你帮他算算经过修剪后的树最多能保留多少个苹果。

注:
一, 节点1为树根,不能把它剪掉。

二, 1个节点的树高度为1。
格式
输入格式

输入文件的第一行为两个整数n,k分别表示这棵树有n个节点,修剪后的树节点数-高度≤k。

第二行开始到第n+1行,每行有两个数,第i+1行的两个数father[i]和c[i]分别表示节点i的父亲是father[i]和节点i处有c[i]个苹果。

规定:节点1的父亲为0。
输出格式

输出文件仅包含一行,ans,表示在满足修建后的树节点数-高度≤k的条件下,最多能保留多少个苹果。
样例1
样例输入1[复制]

5 1
    0 1
    1 1
    1 3
    2 10
    3 4

样例输出1[复制]

15

限制

全部1秒
提示

【约定】
对于10%的数据, n≤10
对于30%的数据, n≤100 0≤k≤20
对于100%的数据,n≤4000 0≤k≤=500

神啦,树形依赖背包还可以出成这样

我们回忆我们怎么做树形依赖背包的

s是i的儿子,f[s]的初值为f[i],dfs(s),然后f[i,v]:=min(f[i,v],f[i,v-1]+a[s])

这样的话我们发现叶子节点存的f其实就是处理了这条链左边的节点所得到的信息

仔细观察题目条件,我们发现这个是树形依赖背包,但是有一条链免费,所以我们dfs两次,一次从左往右,一次从右往左

然后我们枚举免费的链,只枚举根到叶子节点的(1.我们只能保证叶子节点有上面这个性质2.免费的链当然是越深越好啦),然后更新答案

orz出题人

 const
maxn=;
maxk=;
var
fl,fr:array[..maxn,..maxk]of longint;
v:array[..maxn,..maxn]of longint;
a,sum,f:array[..maxn]of longint;
n,k,ans:longint; function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end; procedure dfsl(x:longint);
var
i,j:longint;
begin
sum[x]:=sum[f[x]]+a[x];
for i:= to v[x,] do
begin
for j:= to k do
fl[v[x,i],j]:=fl[x,j];
dfsl(v[x,i]);
for j:= to k do
fl[x,j]:=max(fl[x,j],fl[v[x,i],j-]+a[v[x,i]]);
end;
end; procedure dfsr(x:longint);
var
i,j:longint;
begin
for i:=v[x,] downto do
begin
for j:= to k do
fr[v[x,i],j]:=fr[x,j];
dfsr(v[x,i]);
for j:= to k do
fr[x,j]:=max(fr[x,j],fr[v[x,i],j-]+a[v[x,i]]);
end;
end; procedure main;
var
i,x:longint;
begin
read(n,k);
for i:= to n do
begin
read(f[i],a[i]);
inc(v[f[i],]);v[f[i],v[f[i],]]:=i;
end;
dfsl();
dfsr();
for i:= to n do
if v[i,]= then
for x:= to k do
ans:=max(ans,fl[i,x]+fr[i,k-x]+sum[i]);
writeln(ans);
end; begin
main;
end.

P1676陶陶吃苹果 - vijos的更多相关文章

  1. [Vijos 1676] 陶陶吃苹果

    Description curimit知道陶陶很喜欢吃苹果.于是curimit准备在陶陶生日的时候送给他一棵苹果树. curimit准备了一棵这样的苹果树作为生日礼物:这棵苹果树有n个节点,每个节点上 ...

  2. 武汉科技大学ACM:1007: 陶陶摘苹果

    Problem Description 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹 ...

  3. 洛谷-陶陶摘苹果(升级版)-BOSS战-入门综合练习1

    题目描述 Description 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同 ...

  4. NOIP2005-普及组复赛-第一题-陶陶摘苹果

    题目描述 Description 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳 ...

  5. noip普及组2005 陶陶摘苹果

    陶陶摘苹果 描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在 ...

  6. 2719:陶陶摘苹果-poj

    2719:陶陶摘苹果 总时间限制:  1000ms 内存限制:  65536kB 描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米 ...

  7. 洛谷 P1478 陶陶摘苹果(升级版)

    本萌新第一次发布题解,若有不严谨处请谅解. 我看了前面几位大佬的手笔,表示自己还是比较钟爱桶排序的.它非常简易直接,还省时间,尤其对于这类题目占用的的空间也很小. 我们看到题目下面的说明:xi< ...

  8. C语言 · 陶陶摘苹果2

    算法提高 陶陶摘苹果2   时间限制:1.0s   内存限制:256.0MB      问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个 ...

  9. C语言 · 陶陶摘苹果

    算法提高 陶陶摘苹果   时间限制:1.0s   内存限制:256.0MB      问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个3 ...

随机推荐

  1. OSPF_Network-type

    OSPF的网络类型 目录 OSPF的网络类型... 1 总实验拓扑如下... 2 Router模拟帧中继交换机(所有网路为星型)... 2 配置映射... 3 广播模式下的OSPF. 4 非广播模式下 ...

  2. iOS-NSOperation多线程

    NSOperation 一.简介 1.使用步骤 配合使用NSOperation和NSOperationQueue也能实现多线程编程 先将操作封装到一个NSOperation对象中 然后将NSOpera ...

  3. 【学习笔记】【C语言】循环结构-do while

    用法: while (条件) {     } do {   } while(条件);   while和do-while的区别 1.很多情况下,while和do while可以互换   2.while特 ...

  4. UI3_UITableViewDelete(多选)

    // AppDelegate.m // UI3_UITableViewDelete(多选) // // Created by zhangxueming on 15/7/14. // Copyright ...

  5. php面向对象的多态

    多态是指使用类的上下文来重新定义或改变类的性质或行为,或者说接口的多种不同的实现方式即为多态.把不同的子类对象都当成父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需要 ...

  6. 1.配置EditPuls-编译和运行java程序

    1.工具>配置自定义工具 2.添加工具>程序 1).编译java程序 2).运行java程序

  7. 【风马一族_Java】使用java,画出任意大小的菱形

    public class rhombic { public static void main(String[] args){ /** * scriber()画菱形的方法,参数 9 是指菱形的对角线的长 ...

  8. NSS_10 EXTJS给弹出的子窗口传递参数

    在桌面程序中, 如果需要弹出一个子面板, 并且需要传一些参数给子面板, 我通常的作法就是:在子面板添加对应的数据成员,然后一个构造函数来接收这些参数并赋值级数据成员. 实现起来非常方便. 但是在Ext ...

  9. 获取SilverLight.Web项目中路径Uri

    方法一: //获取指定要呈现的xaml内容的包活xaml文件Uri var strFullUrl = Application.Current.Host.Source.AbsoluteUri; if ( ...

  10. js----方法是否加括号的问题

    在我们js编写程序的时候,我们会写很多函数然后调用它们,那么这些函数调用的时候什么时候加()什么时候不加()?记住以下几个要点. (1)函数做参数时都不要括号. function fun(e) { a ...