Luogu 1552 [APIO 2012] 派遣

2023-05-16

          • 传送门
          • 思路
          • 参考代码

传送门
思路

  唉,我太弱了,什么都不会,题读错了两次,一开始读成了一个一般的背包,然后读成了一个价值和花费相同的背包,最后才发现原来是一个价值为 1 1 <script type="math/tex" id="MathJax-Element-5">1</script> 的背包,也就是说贪心选小的可解,那这道题不就是 Size Balanced Tree(SBT)了吗?直接使用左偏树维护大根堆即可。

参考代码
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <cassert>
#include <cctype>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <bitset>
#include <list>
#include <functional>
typedef long long LL;
typedef unsigned long long ULL;
using std::cin;
using std::cout;
using std::endl;
typedef LL INT_PUT;
INT_PUT readIn()
{
    INT_PUT a = 0; bool positive = true;
    char ch = getchar();
    while (!(ch == '-' || std::isdigit(ch))) ch = getchar();
    if (ch == '-') { positive = false; ch = getchar(); }
    while (std::isdigit(ch)) { a = a * 10 - (ch - '0'); ch = getchar(); }
    return positive ? -a : a;
}
void printOut(INT_PUT x)
{
    char buffer[20]; int length = 0;
    if (x < 0) putchar('-'); else x = -x;
    do buffer[length++] = -(x % 10) + '0'; while (x /= 10);
    do putchar(buffer[--length]); while (length);
}

const int maxn = int(1e5) + 5;
struct Graph
{
    struct Edge
    {
        int to;
        int next;
    } edges[maxn];
    int i;
    int head[maxn];
    Graph() : i()
    {
        memset(head, -1, sizeof(head));
    }
    void addEdge(int from, int to)
    {
        edges[i].to = to;
        edges[i].next = head[from];
        head[from] = i;
        i++;
    }
#define idx(G) idx_##G
#define wander(G, node) for (int idx(G) = G.head[node]; ~idx(G); idx(G) = G.edges[idx(G)].next)
#define DEF(G) const Graph::Edge& e = G.edges[idx(G)]; int to = e.to
} G;
class Pool
{
    static const int size = int(3e6);
    typedef unsigned char BYTE;
    typedef void* PVOID;
    BYTE pool[size];
    PVOID cnt;

public:
    Pool() : cnt((PVOID)pool) {}
    PVOID operator()(std::size_t size)
    {
        PVOID ret = cnt;
        cnt = (PVOID)((BYTE*)(cnt)+size);
        return ret;
    }
} allocator;
template <typename T, typename C = std::less<T> >
class priority_queue
{
    struct Node
    {
        T v;
        int dis;
        Node* ch[2];
        Node(const T& v) : v(v), dis(0) {}
        void* operator new(std::size_t size) { return allocator(size); }
        void operator delete(void*) {}
    };
    Node* root;
    int s;

public:
    priority_queue() : root(), s(), sum() {}

private:
    static Node* merge(Node* a, Node* b)
    {
        if (!b) return a;
        if (!a) return b;
        if (C()(b->v, a->v))
            std::swap(a, b);
        a->ch[1] = merge(a->ch[1], b);
        if (!a->ch[0] || (a->ch[1] && a->ch[0]->dis < a->ch[1]->dis))
            std::swap(a->ch[0], a->ch[1]);
        if (a->ch[1])
            a->dis = a->ch[1]->dis + 1;
        else
            a->dis = 0;
        return a;
    }
public:
    void merge(priority_queue& b)
    {
        s += b.s;
        sum += b.sum;
        root = merge(root, b.root);
        b.root = NULL;
        b.s = NULL;
        b.sum = NULL;
    }

public:
    LL sum;
    void push(const T& v)
    {
        sum += v;
        root = merge(root, new Node(v));
        s++;
    }
    void pop()
    {
        sum -= root->v;
        root = merge(root->ch[0], root->ch[1]);
        s--;
    }
    T top()
    {
        return root->v;
    }
    int size()
    {
        return s;
    }
};

int n, m;
int parent[maxn];
int cost[maxn];
int lead[maxn];
priority_queue<int, std::greater<int> > pq[maxn];

int q[maxn];
void BFS()
{
    int head = 0, tail = 0;
    q[tail++] = 1;
    while (head != tail)
    {
        int from = q[head++];
        pq[from].push(cost[from]);
        wander(G, from)
        {
            DEF(G);
            q[tail++] = to;
        }
    }
}

void run()
{
    n = readIn();
    m = readIn();
    for (int i = 1; i <= n; i++)
    {
        G.addEdge(parent[i] = readIn(), i);
        cost[i] = readIn();
        lead[i] = readIn();
    }
    BFS();

    LL ans = 0;
    for (int i = n - 1; ~i; i--)
    {
        int node = q[i];
        ans = std::max(ans, (LL)lead[node] * pq[node].size());
        priority_queue<int, std::greater<int> >& pqp = pq[parent[node]];
        pqp.merge(pq[node]);
        while (pqp.sum > m)
            pqp.pop();
    }
    printOut(ans);
}

int main()
{
    run();
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Luogu 1552 [APIO 2012] 派遣 的相关文章

  • 2012年10月管理计算机系统,2010年10月全国高等教育自学考试管理系统中计算机应用真题...

    全国2010年10月高等教育自学考试 管理系统中计算机应用试题 课程代码 xff1a 00051 一 单项选择题 本大题共30小题 xff0c 每小题1分 xff0c 共30分 在每小题列出的四个备选项中只有一个是符合题目要求的 xff0c
  • 再见2011,你好,2012。

    不会写文章 xff0c 这个算是对自己的一个总结吧 xff0c 毕业一年半了 xff0c 从事嵌入式也有一年半了 xff0c 总觉得自己连入门都谈不上 xff0c 整天都看上去很忙 xff0c 有时候确实有一大堆的事情要做 xff0c 但是
  • Win Server 2012 远程桌面允许多用户同时登录

    打开任务栏左下角的 服务器管理器 xff0c 在左侧列表中选中 本地服务器 然后将右侧 远程桌面 功能的选项修改为 启用 xff0c 注意取消下面复选框的选中状态 xff1a 同时按住 Win键 43 R 组合键调出运行窗口 xff0c 输
  • “激情与梦想 我的程序员之路”—2012高校巡讲

    2012年3月29日下午2点半 xff0c CSDN高校俱乐部项目主管潘永强老师在我校进行了一场以 激情与梦想 xff0c 我的程序员之路 为主题的演讲 信息管理与工程系团总支书记陈春燕 指导老师王洪涛以及杜光辉 刘冲等7位老师出席了该次讲
  • 再见,2012,你好,2013.

    其实这篇日志过年前 xff0c 已经写得差不多 xff0c 但是忘记发了 xff0c 现在补上 xff0c 现在应该还不是太晚吧 ps xff1a 想了一个很俗的标题 61 61 2012年 xff0c 是对我意义最不平凡的一年 这一年 x
  • 影响SQL Server数据库应用性能的几个常见因素 (2012/1/18)

    转自 xff1a http blogs msdn com b apgcdsd archive 2012 01 18 sql server 2012 1 18 aspx 影响SQL Server数据库应用性能的几个常见因素 性能问题是困扰数据
  • Luogu 3631 [APIO 2011] 方格染色

    传送门思路参考代码细节 传送门 思路 很不错的一道题 xff0c 用到的东西不深 xff0c 但是要想到确实需要一定思维 一开始我想的是动态规划 xff0c 发现如果要设状态需要知道一个格子左边 xff0c 上边和左上边三个格子的状态 然后
  • Luogu 3632 [APIO 2011] 寻路

    传送门正解参考代码 传送门 正解 暴力连边跑最短路就好了 xff0c 只不过代码太长太难写啦 xff01 参考代码 span class hljs preprocessor include lt cstdio gt span span cl
  • Luogu 3647 [APIO 2014] 连珠线

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 又看错题了 题目中说一个新的珠子和一个已经添加的珠子连接起来 xff0c 我没有看到 xff0c 然后就凉了 立个 flag xff1a 已经连续看错五题了 xff0c
  • UOJ 2016 [APIO 2016] Gap

    传送门思路参考代码交互题 交互题大致形式Windows 平台下 xff08 Dev C 43 43 xff09 Ubuntu 平台下 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 题也做不来 这道题简直就是利用
  • Luogu 2168 [NOI 2015] 荷马史诗

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 连哈夫曼树都不会 这道题就是一个 k k 叉哈夫曼树 题目要求满足两个条件 一是代价最小 二是最长长度最小 最长长度最小很好解决 只需要优先合并
  • APIO 2018 Practice Session T1 Wedding cake

    没有传送门题目大意思路参考代码熟悉环境 没有传送门 题目大意 给你一个长度为 n n 的正整数序列 a i ai xff0c 要求构造出 n n 个小数 使得它们的和为 1 1 xff0c 且每个数小数点后恰好有
  • APIO 2018 游记

    Day 0Day 1Day 2Day 3Day 4 Day 0 早上 4 4 点就上车去机场赶那 7 7 点的飞机 感觉很困 xff0c 所以在飞机上就这么睡过去了 北京是个好地方 xff0c 但是与我无关 下飞机后 xff0c 我们一行人
  • Luogu 2114 [NOI 2014] 起床困难综合症

    传送门思路参考代码 传送门 思路 按位贪心 但是我太弱了 xff0c 明明可以 O n O n 预处理 xff0c 我却只会 O 32 n O
  • [Tesseract]Tesseract 在 Visual Studio 2012 中的配置及调用

    一 Tesseract简介 Tesseract是一个开源的OCR xff08 Optical Character Recognition xff0c 光学字符识别 xff09 引擎 xff0c 可以识别多种格式的图像文件并将其转换成文本 x
  • Nginx windows server 2012部署过程

    部署静态网页到服务器 今天做了一个静态网页 xff0c 想部署带到自己的阿里云服务器 通过查询可以使用tomcat容器或者nginx xff0c 主流方式是nginx部署 xff0c 记录一下自己部署的过程 一 nginx简介 Nginx
  • 我的2011 憧憬2012

    逝者如斯夫 不舍昼夜 2012已经向我们走来 xff0c 我们面对2011的离开 xff0c 稍有不舍 xff1b 但是人总得往前走 xff0c 微笑迎接2012 xff0c 注定我们在2012收获的更多 2011 xff0c 写给宿舍的哥
  • 写下2011,展望2012

    一年又过去了 xff0c 好快 xff0c 写个总结 xff0c 也算是对这一年有个交代吧 一 上半年 xff1a 专心科研 总的来说 xff0c 上半年还是过得比较惬意的 xff0c 安心做科研 xff0c 主要还是做wince 嵌入式开
  • 再见2011,你好,2012。

    不会写文章 xff0c 这个算是对自己的一个总结吧 xff0c 毕业一年半了 xff0c 从事嵌入式也有一年半了 xff0c 总觉得自己连入门都谈不上 xff0c 整天都看上去很忙 xff0c 有时候确实有一大堆的事情要做 xff0c 但是
  • SQL Server 2012企业版和标准版的区别

    关于使用Microsoft SQL Server 数据库的公司一般会有疑问 xff0c 企业版数据库和标准版数据库的区别在哪 xff1f 如果采购企业版的价格和标准版的价格相差很大 xff0c 从多方资料查询发现 xff0c 我认为最主要的

随机推荐

  • 转载:LaTeX 定义参数变长的命令

    本文作者 xff1a Liam Huang 本文链接 xff1a https liam page 2017 07 30 define a new command with different amount of parameters in
  • 一个简单的 Lex 词法分析程序示例

    作为一个学习 Lex 词法分析程序的例子 xff0c 下面的 lex 程序将会生成一个分析 LaTeX 中命令的词法分析器 下面的程序包含了很多 lex 语言的语法 xff0c 正则表达式除外 正则表达式的用法网上比较多 xff0c 这里不
  • mysql数据库conf配置详解

    mysqld port 61 6033 skip grant tables datadir 61 usr tools mysql data socket 61 usr tools mysql mysql sock user 61 mysql
  • LaTeX 008:比较方便的键入下划线的方式

    在 LaTeX 中 xff0c 我们有时会需要输入下划线 直接键入 是不行的 xff0c 会出现的编译错误 xff0c 正如网友所述 xff0c LaTeX 为了简化对编译错误的处理禁止在文本模式 xff08 text mode xff09
  • LaTeX 009:自定义带有 * 号的命令

    LaTeX 中 xff0c 我们经常见到 section 和 section xff0c 分别表示有编号的 section 和没有编号的 section 我们也想自己定义带有 号的命令 xff0c 但写下面的代码时却报错了 xff1a ne
  • 2022 New Year‘s Resolution

    Some Might Say 2022 New Year 39 s Resolution Some might say we are on the edge of the new era Always are they saying thi
  • C++ 多线程编程导论(中)

    受篇幅限制 xff0c 上半部分不再更新 xff0c 填坑的新内容都放在此文章中 文章目录 参考资料线程安全 xff08 续 xff09 互斥访问 互斥体 xff08 mutex xff09 和锁 xff08 lock xff09 什么是互
  • C++ 使用模板序列化/反序列化固定键值对

    仅是一个原型 xff0c 留作记录 我感觉可以写出非常逆天的代码 span class token macro property span class token directive hash span span class token d
  • 编译原理习题两则(龙书,写出语言的正则定义)

    3 3 5 3 注释 xff0c 即 和 之间的串 xff0c 且串中没有不在双引号 xff08 34 xff09 中的 注 xff1a 假设双引号是匹配的 思路 xff1a 从空串开始写 xff0c 写出整体框架后 xff0c 通过分类讨
  • 2023 New Year‘s Resolution

    This Is Game 2023 New Year 39 s Resolution My 2022 ended with a day of game I am convinced that I am not to blame becaus
  • 补录:2018 和 2019 New Year‘s Resolution

    前言 xff1a 吉光片羽 xff0c 以飨读者 2018 New Year 39 s Resolution One year and a half ago I felt that life in 2020 would be quite d
  • 原博文地址

    由于账号问题 xff0c 现更改为这个账号 xff0c 以下为原博文地址 使用WH MOUSE LL钩子来判断按键是否是mouse event模拟的 http blog csdn net qq 26140973 article detail
  • [NOI 2003] 文本编辑器 Splay 维护序列 / 块状链表

    传送门 xff08 JZOJ xff09 xff08 第一道全国决赛题 xff09 解法 1 xff1a 使用 Splay 维护 不管怎么说 xff0c 总和刚刚学过的迎合上了 这道题可以直接上 Splay 维护线性序列 xff0c 光标位
  • 一次macOS的升级填坑(macOS Catalina - macOS Monterey)

    目录 小序一 升级前操作二 升级中三 问题填坑1 像我一样长时间卡在一个进度条怎么办2 在更新途中重启过电脑 xff08 完整流程填坑 xff09 3 安装之后不能开机 xff0c 如何紧急拷贝资料4 安装不成功 xff0c 如何重新安装系
  • CF 713C Sonya and Problem Wihtout a Legend

    文章目录 传送门题目大意正解通过维护关键点来维护信息参考代码 传送门 题目大意 给定一个长度为 n n 3000
  • Luogu 3642 [APIO 2016] 烟火表演

    传送门引例 xff08 上一道题 xff09 凸函数一开始的思路正解参考代码总结 传送门 引例 xff08 上一道题 xff09 凸函数 回忆我们上一道题是怎么做的 我们维护的东西的实质是一个 xff08 下 xff09 凸函数 由于我们的
  • Luogu 3631 [APIO 2011] 方格染色

    传送门思路参考代码细节 传送门 思路 很不错的一道题 xff0c 用到的东西不深 xff0c 但是要想到确实需要一定思维 一开始我想的是动态规划 xff0c 发现如果要设状态需要知道一个格子左边 xff0c 上边和左上边三个格子的状态 然后
  • Luogu 3632 [APIO 2011] 寻路

    传送门正解参考代码 传送门 正解 暴力连边跑最短路就好了 xff0c 只不过代码太长太难写啦 xff01 参考代码 span class hljs preprocessor include lt cstdio gt span span cl
  • Luogu 3634 [APIO 2012] 守卫

    传送门思路正解参考代码 传送门 思路 感觉自己越来越笨了 首先 xff0c 很明显这道题需要把没有看到忍者的区间给删去 xff0c 可以用前缀和 O n O n 处理 xff0c 然后对没有删去的地方重新标号 重新标号时 xff0c 需要对
  • Luogu 1552 [APIO 2012] 派遣

    传送门思路参考代码 传送门 思路 唉 xff0c 我太弱了 xff0c 什么都不会 xff0c 题读错了两次 xff0c 一开始读成了一个一般的背包 xff0c 然后读成了一个价值和花费相同的背包 xff0c 最后才发现原来是一个价值为 1