「APIO2012」派遣

传送门

当预算超过限制时,优先丢掉薪水高的忍者(左偏树维护一下),然后答案取合法答案的最大值。

参考代码:

#include <algorithm>
#include <cstdio>
#define rg register
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
using namespace std;
template < class T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while ('0' > c || c > '9') f |= c == '-', c = getchar();
while ('0' <= c && c <= '9') s = s * 10 + c - 48, c = getchar();
s = f ? -s : s;
} typedef long long LL;
const int _ = 1e5 + 5; int tot, head[_], nxt[_], ver[_];
inline void Add_edge(int u, int v)
{ nxt[++tot] = head[u], head[u] = tot, ver[tot] = v; } int n, m, rt, c[_], l[_], siz[_]; LL sum[_], ans;
int tr[_], dis[_], lc[_], rc[_]; inline int merge(int x, int y) {
if (!x || !y) return x + y;
if (c[x] < c[y]) swap(x, y);
rc[x] = merge(rc[x], y);
if (dis[lc[x]] < dis[rc[x]]) swap(lc[x], rc[x]);
dis[x] = dis[rc[x]] + 1;
return x;
} inline void dfs(int u, int f) {
siz[u] = 1, sum[u] = c[u], tr[u] = u;
for (rg int i = head[u]; i; i = nxt[i]) {
int v = ver[i]; if (v == f) continue ;
dfs(v, u), siz[u] += siz[v], sum[u] += sum[v], tr[u] = merge(tr[u], tr[v]);
}
while (sum[u] > m)
sum[u] -= c[tr[u]], --siz[u], tr[u] = merge(lc[tr[u]], rc[tr[u]]);
ans = max(ans, 1ll * siz[u] * l[u]);
} int main() {
read(n), read(m);
for (rg int f, i = 1; i <= n; ++i) {
read(f), read(c[i]), read(l[i]);
if (!f) rt = i; else Add_edge(f, i);
}
dfs(1, 0);
printf("%lld\n", ans);
return 0;
}

最新文章

  1. [LintCode] Trailing Zeroes 末尾零的个数
  2. DB Connection String
  3. Xcode LLDB Debug教程
  4. android 学习资源总结
  5. B-Tree 学习
  6. 关于angular的一些新手容易忽略的小知识点
  7. jQuery &amp; CSS 制作金属质感的选择按钮
  8. linux中send函数MSG_NOSIGNAL异常消息
  9. 程序设计入门——C语言 第5周编程练习 1高精度小数(10分)
  10. mysql rand()产生随机整数范围及方法
  11. thinkphp3.2.3 成功对接支付宝接口
  12. [模板] 最近公共祖先/lca
  13. PAT A1055 The World&#39;s Richest (25 分)——排序
  14. 多CPU,多核,多进程,多线程
  15. cisco 交换机通过console 导入 IOS
  16. 转录本组装软件StringTie的使用说明
  17. Java - &quot;JUC&quot; Semaphore源码分析
  18. css实现3D立方体旋转特效
  19. 基于SSH框架的网上书店系统开发的质量属性
  20. Qt编写百度离线版人脸识别+比对+活体检测

热门文章

  1. 吴裕雄 python 人工智能——基于神经网络算法在智能医疗诊断中的应用探索代码简要展示
  2. 吴裕雄 python 神经网络TensorFlow实现LeNet模型处理手写数字识别MNIST数据集
  3. Jmeter之cookie处理的2中方法
  4. ubuntu16.04/ubuntu18.04安装网易云音乐
  5. Go类型断言
  6. mcast_get_ttl函数
  7. centos7下安装pcre库(pcretest)
  8. 《Web安全攻防 渗透测试实战指南》 学习笔记(一)
  9. 【代码审计】VAuditDemo 后台登录功能验证码绕过
  10. splash-简介及入门