「APIO2012」派遣

传送门

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

参考代码:

  1. #include <algorithm>
  2. #include <cstdio>
  3. #define rg register
  4. #define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
  5. using namespace std;
  6. template < class T > inline void read(T& s) {
  7. s = 0; int f = 0; char c = getchar();
  8. while ('0' > c || c > '9') f |= c == '-', c = getchar();
  9. while ('0' <= c && c <= '9') s = s * 10 + c - 48, c = getchar();
  10. s = f ? -s : s;
  11. }
  12. typedef long long LL;
  13. const int _ = 1e5 + 5;
  14. int tot, head[_], nxt[_], ver[_];
  15. inline void Add_edge(int u, int v)
  16. { nxt[++tot] = head[u], head[u] = tot, ver[tot] = v; }
  17. int n, m, rt, c[_], l[_], siz[_]; LL sum[_], ans;
  18. int tr[_], dis[_], lc[_], rc[_];
  19. inline int merge(int x, int y) {
  20. if (!x || !y) return x + y;
  21. if (c[x] < c[y]) swap(x, y);
  22. rc[x] = merge(rc[x], y);
  23. if (dis[lc[x]] < dis[rc[x]]) swap(lc[x], rc[x]);
  24. dis[x] = dis[rc[x]] + 1;
  25. return x;
  26. }
  27. inline void dfs(int u, int f) {
  28. siz[u] = 1, sum[u] = c[u], tr[u] = u;
  29. for (rg int i = head[u]; i; i = nxt[i]) {
  30. int v = ver[i]; if (v == f) continue ;
  31. dfs(v, u), siz[u] += siz[v], sum[u] += sum[v], tr[u] = merge(tr[u], tr[v]);
  32. }
  33. while (sum[u] > m)
  34. sum[u] -= c[tr[u]], --siz[u], tr[u] = merge(lc[tr[u]], rc[tr[u]]);
  35. ans = max(ans, 1ll * siz[u] * l[u]);
  36. }
  37. int main() {
  38. read(n), read(m);
  39. for (rg int f, i = 1; i <= n; ++i) {
  40. read(f), read(c[i]), read(l[i]);
  41. if (!f) rt = i; else Add_edge(f, i);
  42. }
  43. dfs(1, 0);
  44. printf("%lld\n", ans);
  45. return 0;
  46. }

「APIO2012」派遣的更多相关文章

  1. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  2. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  3. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  4. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  5. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  6. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  7. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  8. 「2014-3-17」C pointer again …

    记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...

  9. 「2014-3-13」Javascript Engine, Java VM, Python interpreter, PyPy – a glance

    提要: url anchor (ajax) => javascript engine (1~4 articles) => java VM vs. python interpreter =& ...

随机推荐

  1. 超好用的免费Redis客户端

    Redis这款基于内存的键值对(key-vlaue)数据库,自带了一个基于命令行式的管理工具redis-cli,但是使用起来并不方便.虽然现在有了许多的图形化管理工具,有些需要收费,有些不好用.最终还 ...

  2. ES6-三点运算符

    首先理解一下函数总的arguments变量,这个变量是函数内部自动生成的,他用来保存传入函数的实参,是一个伪数组. 例: function fun(a,b){ console.log(argument ...

  3. 树莓派安装raspbian并配置开发环境

    1.烧录系统 首先准备好我们要烧录的raspbian系统,可以在树莓派官网中下载https://www.raspberrypi.org/downloads/ 这里我们选择 2018-11-13-ras ...

  4. Laravel Vuejs 实战:开发知乎 (9)定义话题与问题关系

    1.话题[Topic] 执行命令: php artisan make:model Topic –cmr 修改****_**_**_create_topics_table.php数据库迁移文件如下: c ...

  5. 【C语言】输入一个正整数,判断其是否为素数

    素数的定义: 素数(prime number)又称质数,有无限个. 素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为素数.代码1: #include<stdio.h& ...

  6. EasyUI中使用自定义的icon图标

    我们在web开发中为了界面的更加漂亮,我们可能会使用EasyUI框架来帮我们实现一些好看的效果,那么在框架里面提供了很多的样式和图标,但是有时候自带的图标已经满足不了我们啦,这时候我们应该往里面加入我 ...

  7. buu Crypto 刷题记录

    1.MD5 直接解. 2.url编码 直接解. 3.一眼就解密 base64. 4.看我回旋踢 对文本内容全部CaesarDecode. 5.摩丝 直接MorseDecode. 6.Quoted-pr ...

  8. 中国5G,如何避免重复投资?

    前不久,工信部正式向中国移动.中国联通.中国电信发放5G商用牌照,此举意味着中国提前启动5G商用计划,随之而来的,将会是运营商.设备商大规模的投资.相关数据机构预测,三大运营商2019年预计会投入30 ...

  9. Linux vim中方向键变成字母的问题

    使用Ubuntu Desktop 18.04 时 发现 vim 在编辑模式的时候,方向键变成了字母ABCD. 原因: Ubuntu预装的是vim tiny版本,安装vim full版本即可解决. 1. ...

  10. 基于Struts2+Hibernate开发小区物业管理系统 附源码

    开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+MySql数据库 运行效果图: 源码及原文链接:https://javadao.xyz/forum.php?mo ...