
数据结构——可并堆
文章平均质量分 61
无
迷蒙之雨
这个作者很懒,什么都没留下…
展开
-
P1552 [APIO2012]派遣(左偏树+树形DP)
洛谷题目传送门 解题思路 不会左偏树的可以看我的博客左偏树学习记录 对于一个节点,他的L值是确定的,所以我们要最大化选的节点个数,因为上限也是确定的,所以我们只需要尽可能选C小的就可以了,然后把这个结点的所有子树的信息合并起来,在循环删除最大值,直到总和小于m,所以我们可以在每个节点维护一颗左偏树,存储大根堆,然后遍历树的时候自底向上合并左偏树就可以了 #include<bits/stdc++.h> using namespace std; typedef long long LL; const原创 2021-07-31 18:56:54 · 136 阅读 · 0 评论 -
P1456 Monkey King(左偏树)
洛谷题目传送门 题目描述 曾经在一个森林中居住着 N 只好斗的猴子。在最初他们我行我素,互不认识。但是猴子们不能避免争吵,且两只猴子只会在不认识对方时发生争吵,当争吵发生时,双方会邀请它们各自最强壮的朋友并发起决斗(决斗的为各自最强壮的朋友)。当然,在决斗之后两只猴子和他们各自的伙伴都认识对方了(成为朋友),虽然他们曾经有过冲突,但是他们之间绝不会再发生争吵了。 假设每只猴子有一个强壮值,强壮值将在一场决斗后减少为原先的一半(例如 10 会减少到 5,而 5 会减少到 2,即向下取整)。 我们也假设每只猴子原创 2021-07-31 18:51:20 · 202 阅读 · 0 评论 -
左偏树学习记录
因为我对数据结构情有独钟,所以今日来干可并堆 就从最简单的左偏树开始吧 前言 何为可并堆 一般的堆和优先队列都是使用二叉堆( binary heap )实现的 可以实现添加元素和查询,删除集合中的最大/小值,但是一些时候需要我们维护一种堆,使其能快速的对两个堆进行合并,而使用二叉堆合并需要依次把每个元素插进去,所以合并的复杂度是O(nlogn)O(nlogn)O(nlogn),这并不理想,于是我们就发明了可并堆 可并堆的分类 1:斜堆 2:随机堆 3:左偏树 4:配对堆 5:斐波那契堆 左偏树 左偏树是一种原创 2021-07-31 18:46:37 · 124 阅读 · 0 评论