翻zzq的blog过程中发现了一个题一类有依赖的树形背包dp方法。搜题过程中搜到了某场打过的CF的某个题,尴尬的是这题还T着。于是尝试使用blog中的思路dp,发现可能不太行(也可能是我太菜了),但是回忆起jls说的树形dp优化,发现zzq的做法可能年代有点久远,好像被完爆了啊。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void gmin(ll& x,ll y){x=min(x,y);
}
ll dp[5003][5003][2];
int siz[5003];
int c[5003],d[5003];
vector<int>g[5003];
void dfs(int u){siz[u]=1;for(int i=0;i<g[u].size();i++){int v=g[u][i];dfs(v);siz[u]+=siz[v];}
}
void dfs2(int u){dp[u][0][0]=0;dp[u][1][0]=c[u];dp[u][1][1]=c[u]-d[u];for(int i=0;i<g[u].size();i++){int v=g[u][i];dfs2(v);}int tsiz=1;for(int i=0;i<g[u].size();i++){int v=g[u][i];for(int j=tsiz;j>=0;j--){for(int k=1;k<=siz[v];k++){gmin(dp[u][j+k][0],dp[u][j][0]+dp[v][k][0]);}}tsiz+=siz[v];}tsiz=1;for(int i=0;i<g[u].size();i++){int v=g[u][i];for(int j=tsiz;j>=1;j--){for(int k=1;k<=siz[v];k++){gmin(dp[u][j+k][1],dp[u][j][1]+dp[v][k][1]);}}tsiz+=siz[v];}for(int i=0;i<=siz[u];i++)gmin(dp[u][i][1],dp[u][i][0]);
}
int main(){memset(dp,0x3f,sizeof(dp));int n,b;scanf("%d%d",&n,&b);for(int i=1;i<=n;i++){scanf("%d%d",&c[i],&d[i]);if(i>1){int fa;scanf("%d",&fa);g[fa].push_back(i);}}dfs(1);dfs2(1);for(int i=1;i<=n;i++){if(dp[1][i][1]>b)return 0*printf("%d\n",i-1);}printf("%d\n",n);
}

CF 815C 树形背包相关推荐

  1. 【每日DP】day 8、P2014 [CTSC1997]选课(树形DP(树形背包)模板)难度⭐⭐⭐

    P2014 [CTSC1997]选课 题意为选一门课前要看它是否有前提条件:即选了一门主课才能选 "副科",所以可以树形背包来做. 注意是不能用分组背包来做,因为这道题附件有很多个 ...

  2. [Jsoi2016]最佳团体 BZOJ4753 01分数规划+树形背包/dfs序

    分析: 化简一下我们可以发现,suma*ans=sumb,那么我们考虑二分ans,之后做树形背包上做剪枝. 时间复杂度证明,By GXZlegend O(nklogans) 附上代码: #includ ...

  3. [HAOI2015]树上染色(树形dp,树形背包)

    链接:https://ac.nowcoder.com/acm/problem/19996 来源:牛客网 题目描述 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个 ...

  4. P4322-[JSOI2016]最佳团体【0/1分数规划,树形背包】

    正题 题目链接:https://www.luogu.com.cn/problem/P4322 题目大意 nnn个点的一棵树,每个节点有一个(si,pi)(s_i,p_i)(si​,pi​),选择一个点 ...

  5. *多叉树的树形背包常见建模方法

    一.多叉树变二叉树. 这个技巧其实也有两种具体的方法:树的孩子兄弟表示法与dfs序法. 1.树的孩子兄弟表示法. 大家在学习树形结构时一定接触了一个多叉树变二叉树的方法,就是把每个点与它的第一个儿子连 ...

  6. 【bzoj4007】[JLOI2015]战争调度 暴力+树形背包dp

    题目描述 给你一棵 $n$ 层的完全二叉树,每个节点可以染黑白两种颜色.对于每个叶子节点及其某个祖先节点,如果它们均为黑色则有一个贡献值,如果均为白色则有另一个贡献值.要求黑色的叶子节点数目不超过 $ ...

  7. [HAOI2015]树上染色(树形背包)

    有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所有点染色后,你会获得黑点两两之间的距离加 ...

  8. 【bzoj4753】[Jsoi2016]最佳团体 分数规划+树形背包dp

    题目描述 JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人都由一位编号比他小的候选人Ri推荐.如果Ri=0则说明这个候选人是JYY自己看上的.为了 ...

  9. 【bzoj5072】[Lydsy十月月赛]小A的树 树形背包dp

    题目描述 给出一棵n个点的树,每个点有黑白两种颜色.q次询问,每次询问给出x和y,问能否选出一个x个点的联通子图,使得其中黑点数目为y. 输入 第一行一个正整数 T 表示数据组数. 对于每一组数据,第 ...

  10. HDU-4044 树形背包dp好题

    不会做,题解是参考网上的.感觉这道题是到好题,使得我对树形背包dp更了解了. 有几个注意的点,直接给出代码,题解以及注意点都在注释里了. #include<bits/stdc++.h> u ...

最新文章

  1. 怎么卸载云骑士装机大师
  2. flask教程之创建第一个flask应用
  3. Python 面向对象-如何查看类的父类,外部如何获取类的名字
  4. Android编程之Intent源码详解
  5. python高阶函数_python_bomb----高阶函数
  6. scala类型参数的上界和下界
  7. python的property用法_Python的@property使用方法详解
  8. 查看计算机GUID的WMI类
  9. Keli 编译遇到 *** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
  10. 学习Python爬虫有哪些书籍书籍?看这几本书就够了
  11. 2022牛客寒假算法基础集训营(一)1全部题解
  12. 移动技术--从网页游戏谈起 1
  13. 若依的框架怎么样_若依后台管理框架初识
  14. 【教程】手把手教你做外卖红包推广返利公众号搭建
  15. Python实现点击选择验证码破解
  16. 三年前,我差点成了爬虫大师
  17. pmp复习资料链接-2021.06.20考试(中培)
  18. Python PIL Image的使用
  19. VSC/SMC(十六)——自适应鲁棒滑模控制
  20. 关于form 上传文件时的小问题

热门文章

  1. 微信小程序 自定义日期选择器
  2. html5头像裁剪,H5头像裁剪的实现与坑位
  3. 南邮 OJ 1160 繁杂的道路
  4. 《黄帝内经》四季养生法
  5. 【老九】【Python】函数与模块
  6. Pytorch系列(七):猫狗大战3-MobileNet_V3
  7. 客户贷款逾期预测[2]-svm和决策树模型
  8. 不谋一时不足以谋一域_“不谋万世者,不足谋一时。不谋全局者,不足谋一隅”出自哪里?是什么意思?...
  9. linux 深信服ssl_mac访问不了深信服的ssl vpn
  10. 在网页设计中如何排版