随笔分类 - 数据结构-堆
摘要:题目链接 "BZOJ2800" 题解 区间加极难操作,差分之后可转化为两点一加一减 那么现在问题就将每个点暂时独立开来 先判定每个点是否被$(A,B)$整除,否则无解 之后我们先将$A,B$化为互质,所有数除一个$(A,B)$ 求得 $$Ax + By = 1$$ 那么对于点$d[i]$,满足 $$
阅读全文
摘要:题目链接 "BZOJ2802" 题解 这样的问题通常逆序贪心 每个$A[i]$只能用来满足后面的$B[i]$ 就用当前$A[i]$不断提供给最小的$B[i]$即可 用一个堆维护
阅读全文
摘要:题目链接 "uoj" 题解 以前看别人博客,在考场上用费用流做,一直以为这题是毒瘤网络流题 没想到竟然是贪心模拟题。。。 如果只有一个蔬菜呢?这就是一个经典的普及难度的贪心,正着推面临优先选择的困难,而逆着推由于不存在淘汰,所以可以贪心选最大的 首先$s_i$的限制很容易处理,只需将每一个蔬菜分出一
阅读全文
摘要:题目链接 "CF487E" 题解 圆方树 + 树剖 裸题 建好圆方树维护路径上最小值即可 方点的值为其儿子的最小值,这个用堆维护 为什么只维护儿子?因为这样修改点的时候就只需要修改其父亲的堆 这样充分利用了一对一的特性优化了复杂度 如此询问时如果$lca$为方点,再询问一下$lca$的父亲即可 复杂
阅读全文
摘要:题目链接 "BZOJ3832" 题解 神思路orz,根本不会做 设$f[i]$为到$i$的最长路,$g[i]$为$i$出发的最长路,二者可以拓扑序后$dp$求得 那么一条边$(u,v)$的对应的最长链就是$f[u] + 1 + g[v]$ 我们人为加入源汇点$S$,$T$,$S$向每个点连边,每个点
阅读全文
摘要:题目链接 "BZOJ1095" 题解 传说中的动态点分治,一直不敢碰 今日一会,感觉其实并不艰涩难懂 考虑没有修改,如果不用树形dp的话,就得点分治 对于每个重心,我们会考虑其分治的子树内所有点到它的距离,然后取所有不同子树中最大的两个相加来更新答案 如果带修改怎么办呢? 考虑一个点$u$被修改了,
阅读全文
摘要:题目链接 "BZOJ5158" 题解 题中所给的最长上升子序列其实就是一个限制条件 我们要构造出最大的以$i$开头的最长下降子序列,就需要编号大的点的权值尽量小 相同时当然就没有贡献,所以我们不妨令权值为一个$1$到$n$的排列 考虑如何满足限制条件 对于所有$a[i] = v$的点,点与点之间一定
阅读全文
摘要:题目链接 "BZOJ2535" 题解 航班之间的关系形成了一个拓扑图 而且航班若要合法,应尽量早出发 所以我们逆拓扑序选点,能在后面出发的尽量后面出发,不会使其它点变得更劣,容易知是正确的 第二问只需枚举航班$x$,拓扑排序时忽视$x$,最后无法选点时就是$x$最早的时间 C++ include i
阅读全文
摘要:题目 ftiasch 18岁生日的时候,lqp18_31给她看了一个神奇的序列 A1, A2, ..., AN. 她被允许选择不超过 M 个连续的部分作为自己的生日礼物。 自然地,ftiasch想要知道选择元素之和的最大值。你能帮助她吗? 输入格式 第1行,两个整数 N (1 ≤ N ≤ 105)
阅读全文

浙公网安备 33010602011771号