题目描述

分析

有依赖的树上背包。可以用Dfs序进行Dp,但更直接的方法是先将其转化为二叉树,在对左右儿子分配,进行Dp。Dfs(x,t)函数表示在以x为根的子树上,还能接受t的毒,所获得的最大美味度。若根节点不选,则直接递归查询右儿子;若根节点选,则对其进行分配,左儿子要i的能接受的毒,右儿子要t-i-p[i]的能接受的毒,再用记忆化优化。最后输出Dfs(1,m)。(注意边界条件与初值,初值应该设为0,因为获得负数的美味程度不如不拿。考试的时候忘了这一点被卡掉了50分)

至于将多叉树转化为二叉树,利用左儿子右兄弟的法则建树。

代码

#include <iostream>
#include <cstdio>
using namespace std;
const int N=2005,M=2005;
struct Edge {int to,next;
}e[N*2];
int h[N],cnt;
int n,m;
int v[N],p[N];
int f[N][M];
int lc[N],rc[N];
void add(int x,int y) {e[++cnt]=(Edge){y,h[x]};h[x]=cnt;
}
void build(int x,int fa) {int t=0;for (int i=h[x];i;i=e[i].next) {int y=e[i].to;if (y==fa) continue;if (!t) {lc[x]=y;//第一个儿子作为x的左儿子 t=y;} else {rc[t]=y;//其余的儿子作为上一个儿子的右儿子 t=y;}build(y,x);}
}
int Dfs(int x,int t) {if (x==0||t<=0) return 0;//0号节点不存在,返回0;可承受的毒<=0,返回0; if (f[x][t]) return f[x][t];//记忆化f[x][t]=max(Dfs(rc[x],t),0);//根节点不选,直接右儿子 int temp=0;for (int i=0;i<=t-p[x];i++) {temp=max(temp,Dfs(lc[x],i)+Dfs(rc[x],t-i-p[x])+v[x]);//根节点选,左右儿子分配 }f[x][t]=max(f[x][t],temp);return f[x][t];
}
int main() {scanf("%d%d",&n,&m);for (int i=1;i<=n;i++) {scanf("%d%d",&v[i],&p[i]);}for (int i=1;i<n;i++) {int a,b;scanf("%d%d",&a,&b);add(a,b);add(b,a);}build(1,0);printf("%d",Dfs(1,m));return 0;
}

「NOIP2018模拟赛」 摘果子 - 树形Dp相关推荐

  1. 「CSP-S模拟赛」2019第四场

    「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...

  2. jzoj 5906. 【NOIP2018模拟10.15】传送门(树形dp)

    5906. [NOIP2018模拟10.15]传送门 Description 8102年,Normalgod在GLaDOS的帮助下,研制出了传送枪.但GLaDOS想把传送枪据为己有,于是把Normal ...

  3. 备战Noip2018模拟赛5(B组)T2 Tree 采果子

    10月4日备战Noip2018模拟赛5(B组) T2 Tree采果子 题目描述 LYL大牛今天心情不错,于是走到埃及郊外旅游.他边走边向四周望望,发现周围有许多果树.这些树之间互相到达的时间LYL是知 ...

  4. EZ 2018 06 17 NOIP2018 模拟赛(十九)

    这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...

  5. 备战Noip2018模拟赛3(B组)T1 Apple 韬韬抢苹果

    10月3日备战Noip2018模拟赛3(B组) T1 Apple韬韬抢苹果 题目描述 又到了收获的季节,树上结了许多韬韬,错了,是许多苹果,有很多个小韬韬都来摘苹果.每个韬韬都想要最大的苹果,所以发生 ...

  6. 备战Noip2018模拟赛3(B组) T2 Dance 开场舞蹈

    10月3日备战Noip2018模拟赛3(B组) T2 Dance 开场舞蹈 题目描述 在全世界人民的期盼下,2008年北京奥林匹克运动会终于隆重召开了! 为了展示中华民族博大精深的优秀传统文化,负责开 ...

  7. 备战Noip2018模拟赛10(B组) T1 Max 和最大

    10月20日备战Noip2018模拟赛10 T1 Max和最大 题目描述 CYF的黑题,偏题,怪题,黑科技题,大码农题都做腻了,于是她想做一下签到水题,她希望从有一个长度为ň的整数序列(A1,A2,. ...

  8. 备战Noip2018模拟赛11(B组)T4 Path 好路线

    10月27日备战Noip2018模拟赛11(B组) T4路径好路线 题目描述 nodgd在旅游.现在,nodgd要从城市的西北角走到东南角去.这个城市的道路并不平坦,nodgd希望找出一条相对比较好走 ...

  9. 备战Noip2018模拟赛7(B组)T2 Pearl 数数

    10月5日备战Noip2018模拟赛7(B组) T2珍珠数 题目描述 给定Ñ个整数,求值在某个范围内的数的个数. 输入格式 第一行为正整数ñ. 第二行有Ñ个整数(0 <=数值<= 231- ...

最新文章

  1. left join 和 left outer join 的区别
  2. windows加固方案
  3. java实现飞机大战游戏
  4. ArrayBlockingQueue与LinkedBlockingQueue
  5. c++ 使用正则匹配url
  6. DirectShow Filter 开发典型例子分析 ——字幕叠加 (FilterTitleOverlay)1
  7. tensorflow 函数查找
  8. 东山里的传说——《荒原的呼唤》选载之四
  9. php单例模式详解,PHP 单例模式解析和实战
  10. FF的插件iMacros简单交流
  11. 图片标注工具Labelme的安装及使用方法
  12. c++打印素数表(线性筛)
  13. Hot and cold pages
  14. 拓嘉启远电商:拼多多缺货会降权吗?如何处理
  15. 【youcans 的 OpenCV 例程200篇】153. 边缘检测之 DoG 算子
  16. ImageMagick将多张图片拼接成一张图片_不会PS也没关系!我想向你推荐这18款免费好用的在线图片处理工具...
  17. Linux系统到底是什么?
  18. 装系统时无法创建新的分区
  19. Max导Unity Humanoid模型
  20. 湖北联通联手银行开展网络安全演练

热门文章

  1. 深入剖析TikTok零播放问题,并附解决方案
  2. LeetCode和NewCode常见错误(持续更新)
  3. xmpp协议(即时通信协议规范)
  4. Android项目连接手机
  5. [LeetCode]--387. First Unique Character in a String
  6. RTL8380M/RTL8382M管理型交换机系统软件操作指南二:转发表
  7. python中return的作用总结
  8. C语言中squeeze的作用,pytorch下的unsqueeze和squeeze的用法说明
  9. 华为鸿蒙手机系统什么时候开始更新_华为鸿蒙OS适配计划曝光,一起看看你的手机什么时候可以升级...
  10. 新手小白学习嵌入式系统怎么学?嵌入式学习路线