[APIO2012] 派遣 dispatching】的更多相关文章

题目链接:戳我 就是尽可能地选取排名小的,加起来就可以了.然后我们考虑利用一个大根堆,一个一个合并,如果超过派遣的钱,我们就把费用最大的那个忍者丢出队列. 左偏树,作为一个十分优秀的可并堆,我们这道题利用的就是这个数据结构. 左偏树不会?戳我 这里有一张来自HolseLee dalao的图: 因为是从下往上合并嘛..所以dfs整棵树的时候一定注意要先把dfs递归放下去,等把所有的子树都处理完之后,才可以开始处理自己呀!! 代码如下: #include<iostream> #include<…
Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 4580  Solved: 2348 Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.在这个帮派里,有一名忍者被称之为 Master.除了 Master以外,每名忍者都有且仅有一个上级.为保密,同时增强忍者们的领导力,所有与他们工作相关的指令总是由上级发送给他的直接下属,而不允许通过其他的方式发送.现在你要招募一批忍者,并把它们派遣给顾客.你需要为每…
796. [APIO2012] 派遣 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.  在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且仅有一个上级.为保密,同时增强忍者们的领导力,所有与他们工作相关的指令总是由上级发送给他的直接下属,而不允许通过其他的方式发送.  现在你要招募一批忍者,并把它们派遣给顾客.你需要为每个被派遣的忍者支付一定的薪水,同时使得支付的薪水总额不超过你的预算.另外,为了发送指令,你需要选择一名忍者作为管理者…
洛谷1552 [APIO2012]派遣 原题链接 题解 luogu上被刷到了省选/NOI- ...不至于吧 这题似乎有很多办法乱搞? 对于一个点,如果他当管理者,那选的肯定是他子树中薪水最少的k个,而且这k个薪水之和<=m k又要最大 可以维护n个可并堆(代码里是斜堆(不会左偏树)(平衡树启发式合并也行???)) 每次dfs所有儿子,搞完以后再把儿子的堆与键值为自己薪水的节点全部merge起来,然后一直弹最大的弹到和<=m为止,然后用堆的size*L更新答案. 用大根堆维护. Code //…
[APIO2012]派遣 题目大意: 给定一棵\(n(n\le10^5)\)个结点的有根树,每个点有代价\(c_i\)和权值\(l_i\),要求你选定一个结点\(k\),并在对应的子树中选取一个点集\(S\)(不需要包括\(k\)).在满足\(\sum_{i\in S}c_i\le m\)的情况下,最大化\(|S|\cdot l_k\). 思路: 贪心+堆合并. 源代码: #include<cstdio> #include<cctype> #include<ext/pb_ds…
[luogu P1552] [APIO2012]派遣 题目背景 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 题目描述 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且仅有一个上级.为保密,同时增强忍者们的领导力,所有与他们工作相关的指令总是由上级发送给他的直接下属,而不允许通过其他的方式发送. 现在你要招募一批忍者,并把它们派遣给顾客.你需要为每个被派遣的忍者支付一定的薪水,同时使得支付的薪水总额不超过你的预算.另外,为了发送指…
P1552 [APIO2012]派遣 题面 考虑枚举每个节点作为管理者,计算所获得的满意程度以更新答案.对于每个节点的计算,贪心,维护一个大根堆,每次弹出薪水最大的人.这里注意,一旦一个人被弹出,那么不再可能出现在其祖先们的最优解里(废话),所以使用可并堆左偏树优化复杂度. #include <cstdio> #include <algorithm> #define MAXN 100010 #define MAX(A,B) ((A)>(B)?(A):(B)) #define…
BZOJ2809&&LG1552 APIO2012派遣(线段树合并) 题面 自己找去 HINT 简化一题面就是让你从每个点的子树中以\(<=m\)的代价选取尽可能多的点,然后乘上子树根的一个属性值,每个点做一遍取个\(max\).看大家都是什么可并堆.dfs序+主席树,我的做法是对于每个节点开一颗权值线段树,每个节点维护\(size\)和\(tot\),然后修改和线段树合并都是常规写法. 着重讲一下查询 这样的写法之后就是要实现查询用m的代价可以最多选择多少个点 inline int…
2809: [Apio2012]dispatching Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1932 Solved: 967 [Submit][Status][Discuss] Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后根据自己的工作获取报偿.在这个帮派里.有一名忍者被称之为 Master.除了 Master以外.每名忍者都有且仅有一个上级.为保密,同一时候增强忍者们的领导力.全部与他们工作相关的指令总…
贪心/可并堆 跪了……我这么弱果然还是应该回家种红薯去…… 考虑选人的时候,每个人对答案的贡献其实是一样的,都是1,那么我们就贪心地去选花钱少的就好啦~ 具体的做法:倒着枚举(因为有b[i]<i),考虑选第 i 个人做领导者的时候,以他为根的子树中如果花费>m,那么我们就踢掉花钱最多的人,直到sum<m,用l[i]*num[i]更新答案(num[i]表示以 i 为根的子树中选了多少人),然后把这棵子树的堆并到他的父亲的堆中去(初始每个人的堆都只有他自己) 或许你看看代码更容易理解一点………