LINK


思路

首先发现依赖关系是一个树形的结构
然后因为直接算花多少钱来统计贡献不是很好
因为数组开不下
那就可以算一个子树里面选多少个的最小代价就可以了

注意统计贡献的时候用优惠券的答案只能在1号点进行统计


//Author: dream_maker
#include<bits/stdc++.h>
using namespace std;
//----------------------------------------------
//typename
typedef long long ll;
//convenient for
#define fu(a, b, c) for (int a = b; a <= c; ++a)
#define fd(a, b, c) for (int a = b; a >= c; --a)
#define fv(a, b) for (int a = 0; a < (signed)b.size(); ++a)
//inf of different typename
const int INF_of_int = 1e9;
const ll INF_of_ll = 1e18;
//fast read and write
template <typename T>
void Read(T &x) {bool w = 1;x = 0;char c = getchar();while (!isdigit(c) && c != '-') c = getchar();if (c == '-') w = 0, c = getchar();while (isdigit(c)) {x = (x<<1) + (x<<3) + c -'0';c = getchar();}if (!w) x = -x;
}
template <typename T>
void Write(T x) {if (x < 0) {putchar('-');x = -x; }if (x > 9) Write(x / 10);putchar(x % 10 + '0');
}
//----------------------------------------------
const int N = 5010;
struct Edge{int v, nxt;
}E[N << 1];
int head[N], tot = 0;
ll c[N], d[N], siz[N], n;
ll dp[N][N][2], ans = 0, B;
void add(int u, int v) {E[++tot] = (Edge){v, head[u]};head[u] = tot;
}
void dfs(int u, int fa) {siz[u] = 1;dp[u][1][1] = c[u] - d[u];dp[u][1][0] = c[u];for (int i = head[u]; i; i = E[i].nxt) {int v = E[i].v;if (v == fa) continue;dfs(v, u);fd(j, siz[u], 0)fd(k, siz[v], 0) {dp[u][j + k][1] = min(dp[u][j + k][1], dp[u][j][1] + min(dp[v][k][0], dp[v][k][1]));dp[u][j + k][0] = min(dp[u][j + k][0], dp[u][j][0] + dp[v][k][0]);  }siz[u] += siz[v];}fu(i, ans + 1, siz[u]) {if (dp[u][i][0] <= B) ans = i;else break;}
}
int main() {memset(dp, 0x3f, sizeof(dp));Read(n); Read(B);fu(i, 1, n) {Read(c[i]); Read(d[i]);dp[i][0][0] = 0;if (i > 1) {int u; Read(u);add(i, u);add(u, i);}}dfs(1, 0);fu(i, ans + 1, n) if (dp[1][i][1] <= B) ans = i;Write(ans);return 0;
}

转载于:https://www.cnblogs.com/dream-maker-yk/p/9760186.html

Codeforces 815C. Karen and Supermarket【树形DP】相关推荐

  1. CF815C Karen and Supermarket [树形DP]

    题目传送门 Karen and Supermarket On the way home, Karen decided to stop by the supermarket to buy some gr ...

  2. CodeForces - 1324F Maximum White Subtree(树形dp)

    题目链接:点击查看 题目大意:给出 n 个点组成的树,每个点都有一个颜色,非黑即白,现在问对于每个点而言,选出一个连通块,使得白色点的个数与黑色点的个数做差最大 题目分析:记录一下div3的第一次ak ...

  3. CodeForces - 1485E Move and Swap(树形dp)

    题目链接:点击查看 题目大意:给出一棵有根树,每个节点都有权值,满足所有叶子结点到根节点的距离相同,初始时在根节点有两个硬币,分别是红色和蓝色,每次可以执行如下操作: 将红色硬币移动到任意一个子节点 ...

  4. Codeforces 1276D/1259G Tree Elimination (树形DP)

    题目链接 http://codeforces.com/contest/1276/problem/D 题解 我什么DP都不会做,吃枣药丸-- 设\(f_{u,j}\)表示\(u\)子树内,\(j=0\) ...

  5. E. Xenon's Attack on the Gangs,Codeforces Round #614 (Div. 2),树形dp

    E. Xenon's Attack on the Gangs http://codeforces.com/contest/1293/problem/E On another floor of the ...

  6. 【CodeForces - 697D】Puzzles(树形dp,期望dp)

    题目大意: 给定一棵树,从1开始,按DFS的方式访问这棵树  每次从父亲节点随机访问儿子,问每个节点被访问到的时间的期望 输入:第一行一个数n,代表n个节点.第二行n-1个数p2,p3,p4,p5.. ...

  7. codeforces 816 E. Karen and Supermarket(树形dp)

    题目链接:http://codeforces.com/contest/816/problem/E 题意:有n件商品,每件有价格ci,优惠券di,对于i>=2,使用di的条件为:xi的优惠券需要被 ...

  8. Codeforces Round #263 (Div. 2) D. Appleman and Tree 树形dp

    链接: http://codeforces.com/contest/462/problem/D 题意: 给定n个点的树, 0为根,下面n-1行表示每个点的父节点 最后一行n个数 表示每个点的颜色,0为 ...

  9. 【Codeforces Round #614(div2)】E-Xenon's Attack on the Gangs(树形dp)

    一.题目链接 https://codeforces.com/contest/1293/problem/E 二.题意 给n个结点,n-1条无向边.即一棵树.我们需要给这n-1条边赋上0~n-2不重复的值 ...

最新文章

  1. VS Code 调试 OneFlow
  2. Safari的CSS HACK方法
  3. ICCV 2017《Unsupervised Laerning of Important Objects from First-Person Videos》论文笔记
  4. OpenCASCADE:读取和写入 STEP
  5. python math.asin
  6. 详解Redis的架构演化之路(附16张图解)
  7. 2016/03/30
  8. pwm 正弦波_正弦波逆变器和修正波逆变器的区别
  9. adult Income 一个人的年收入是由各种因素造成的。直观上,它受个人的教育水平、年龄、性别、职业等因素的影响。
  10. 如何删除“无法删除文件,无法读取源文件或磁盘”文件
  11. wechat 报警的实现方法
  12. 网络:以太网交换机、路由器
  13. codeforces 1090B切题记录
  14. 给OneNote2016安装NoteHighlight2016, 插件无法加载问题【已解决】
  15. HTML怎么打双引号,双引号怎么打出来
  16. 鸿蒙系统内部测试板,华为鸿蒙系统内测
  17. 什么样的人适合做项目经理
  18. python输入日期,判断这一天是该年的第几天?
  19. 深度学习未来的发展点
  20. 中秋节古典flash动画素材

热门文章

  1. 嘉善 机器人比赛_电脑机器人比赛辅导教师培训在浙师大嘉善附校举行
  2. tomcat 优化_浅谈Tomcat服务器优化方法
  3. RTX5 | 内存池02 - 剩下几个API
  4. int** 赋值_关于Java语言复合赋值运算符的两个问题,快来瞧瞧
  5. 基于php的选课系统设计(含源文件)
  6. Java笔记-JdbcTemplate批量执行insert及update
  7. Spring Boot笔记-@ComponentScan初步解析
  8. C++笔记-Qt中使用Lambda时[]中的形式
  9. C++设计模式-访问者模式
  10. Qt工作笔记-设置窗体底纹以及控件透明度