首页 > TAG信息列表 > Apio2012

APIO2012 派遣

Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿。在这个帮派里,有一名忍者被称之为 Master。除了 Master以外,每名忍者都有且仅有一个上级。为保密,同时增强忍者们的领导力,所有与他们工作相关的指令总是由上级发送给他的直接下属,而不允许

[APIO2012]派遣

link 算是左偏树的模板题。真正的模板题懒得放了。首先总结一下什么是左偏树。 左偏树就是可并堆。假如想要把两个普通堆进行合并,最简单的方法就是把较小堆的元素一个一个假如较大堆中,应该是\(O(NlogN)\)左右吧。但我们发现这样的做法非常费时间,何不考虑直接把一个堆直接挂到另一

[APIO2012]派遣

看着\(dp\)标签进来的。 结果是个数据结构嘛。 这个对于每个人都维护一下子树里\(sum <= m\)的最大人数就好了。 考虑贪心一下就不说了。从叶子节点往上合并堆,当然这种简单的合并操作,\(stl\)最好,跑得还很快。 [APIO2012]派遣 #include<iostream> #include<cstdio> #include<alg

[APIO2012]苦无

这种题口胡一下,并且谴责一下出题人就好了,千万别像我一样头铁去写7个k。 考虑算出每一个苦无经过的格子,最后矩形面积并。 只要求出每一个苦无和哪一个苦无相撞,就容易求出它经过的格子。 苦无相撞无非就六种情况,分方向讨论,然后维护每一条平行于坐标轴的直线,以及与坐标轴成45度角的直

[APIO2012]派遣【左偏树】

题目链接   给一棵N个点的树,然后问以某个点作为节点的时候,其子树中在购买力为M的情况下最多购买多少个节点,对于所有的子树,求节点数乘以该子树根节点的b值的最大值。   于是,想到的做法就是对于每个点去维护一个大根堆,如果大根堆内的和超过了M,那么就需要弹出最大的节点,于是,就是维

【BZOJ2811】[APIO2012] Guard(差分+贪心)

点此看题面 大致题意: 一个长度为\(n\)的序列,其中有\(k\)个\(1\)。有\(m\)个限制形如区间\([l,r]\)内是否有\(1\),求哪些位置肯定有\(1\)。 前言 \(Jan\ 29th\)刷题计划(4/6),算法标签:贪心。 一开始想简单了,结果自闭了一个多小时,然后去做作业做了半个小时,再翻了翻题解,才发现自己太\(nai

[APIO2012]派遣

[APIO2012]派遣 枚举所有忍者在哪棵子树内, 答案即为本子树内最多派遣的忍者数乘上子树根在原树中祖先最强的领导力, dfs用可并堆合并两棵子树即可, 这道题用不着用并查集维护连通性 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define ll l

BZOJ2809&&LG1552 APIO2012派遣(线段树合并)

BZOJ2809&&LG1552 APIO2012派遣(线段树合并) 题面 自己找去 HINT 简化一题面就是让你从每个点的子树中以\(<=m\)的代价选取尽可能多的点,然后乘上子树根的一个属性值,每个点做一遍取个\(max\)。看大家都是什么可并堆、dfs序+主席树,我的做法是对于每个节点开一颗权值线段树,每个节点维

[2018.12.6]BZOJ2809 [Apio2012]dispatching

考虑维护每一个点以及它的子树中被派遣的忍者。 对于一个点,我们用类似树形DP的方式自底向上进行,先把它的所有孩子中被派遣的忍者放到一起,如果他们的薪水总和超过\(m\),就不停地将其中薪水最大的忍者删除,直到薪水总和小于等于\(m\)。 找到所有点中领导能力和被派遣忍者数量乘积

P1552 [APIO2012]派遣

思路 复习下左偏树 左偏树首先满足堆性质,其次定义了一个dis,使得每个点的dis都是右子树dis+1,且左子树的dis>=右子树的dis 合并过程可以参考FHQ treap的merge进行修改 一开始看错题了,是选择的人要能跟所有派遣者通信(等价于是选择子树中的点),不是选中一个人使他变得可以与所有人通信 观

【[APIO2012]派遣】

题目 直接线段树合并就好了 之后在线段树上二分贪心选取金额较少的 如果是左偏树的话就开一个大根堆,根和子树顺次合并,合并之后堆内所有元素总和如果大于\(m\)就删除堆顶,由于每个元素只会被删除一次,所以复杂度非常科学 代码 #include<algorithm> #include<iostream> #include<cstrin

p3634 [APIO2012]守卫

传送门 分析 1.先预处理出不被0覆盖的点,然后对每个点处理出在它左边离他最近的点和在他右边理他最近的点。 2.对于每个至少存在一个忍者的区间,先将它左右边界处理为不被0所覆盖。排序后将包含其他区间的区间去除。 3.贪心求出前i个区间最小忍者数和后i个区间最小忍者数。 4.我们知

p1552 [APIO2012]派遣

传送门 分析 首先这个题有两个坑点 一是一个点不管可以由父亲领导,任何祖宗均可领导 而是根节点的花费要算在总费用中且它自己也算在总节点数量中 于是我们考虑如何求答案 首先我们知道对于一个点如果在一个子树中就没有选则在更大的一棵子树中一定不会选 因为一棵大的子树有更多选