#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = ;
int n, m;
int v[N], w[N];
int h[N], e[N], ne[N], idx;
int f[N][N];
//f[i,j]表示所有从以i为根的子树中选,且总体积不超过j的方案
void add(int a, int b) {
e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}
void dfs(int u) {
for(int i=h[u]; ~i; i=ne[i]) {//遍历u号点的所有子树 物品组
int son=e[i];
dfs(e[i]);
//分组背包
for(int j=m-v[u]; j>=; j--)//体积
for(int k=; k<=j; k++)//循环决策,选哪个 当前用多少体积
//按体积划分
f[u][j]=max(f[u][j],f[u][j-k]+f[son][k]);
}
//把点u加进去
for (int i = m; i >= v[u]; i -- ) f[u][i] = f[u][i - v[u]] + w[u];
//清空剩余的部分 放不进去的情况
for (int i = ; i < v[u]; i ++ ) f[u][i] = ;
} int main() {
cin >> n >> m;
memset(h, -, sizeof h);
int root;//找根节点
for (int i = ; i <= n; i ++ ) {
int p;
cin >> v[i] >> w[i] >> p;
if (p == -) root = i;//说明为根节点
else add(p, i);//依赖p号点,那就建一条p指向i的边
}
dfs(root);//从根节点开始递归操作
cout << f[root][m] << endl;//表示考虑整课树的情况下,体积不超过m,最大价值是多少
return ;
}

最新文章

  1. Myeclipse 安装SVN步骤
  2. 赴美工作常识(Part 4 - 面试)
  3. SaltStack与ZeroMQ(二)
  4. Runas命令:能让域用户/普通User用户以管理员身份运行指定程序。
  5. TYVJ计算几何
  6. Html - 返回Top
  7. Team Homework #3 软件工程在北航——IloveSE
  8. hdu 1520 Anniversary party || codevs 1380 树形dp
  9. UDP TCP应用场景
  10. 在Apache Tomcat 7设置redis作为session store
  11. Set Matrix Zeroes -- LeetCode
  12. 开源免费的.NET图像即时处理的组件ImageProcessor
  13. [VirtualBox] 1、NAT模式下端口映射
  14. MLR算法[Paper笔记]
  15. MySQL索引扩展(Index Extensions)学习总结
  16. 给OkHttp Client添加socks代理
  17. Angular2 web project UltraRacing (一,如何启动一个Angular项目?)
  18. (转)如何禁用Windows 10系统的触摸屏
  19. angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)
  20. delphi 文件查找

热门文章

  1. css实现文字过长显示省略号的方法
  2. 查找第K大的值
  3. 电信IOT平台固件升级
  4. Eclipse jee最新版国内镜像点下载方式
  5. centos yum 安装jdk1.7
  6. tp 框架 文本编辑器 不解析HTML标签
  7. Map的底层实现原理
  8. C# WPF聊天界面(3/3)
  9. Linux centos7 安装 phpMyAdmin
  10. JS中require函数的警告提示