左偏树(可并堆)
HermioneL
年轻的好处在于,你还没有太多经验,并天生相信一切皆可能。
展开
-
左偏树(可并堆)详解及有关模板
这几天搞了几道左偏树的题,主要是开阔眼界,堆还能这样写,下面详细讲解一下左偏树的特点及其应用。首先从可并堆的定义讲起:可并堆,就是一种支持合并的堆,如果用普通的二叉堆来实现合并操作,则O(n)的合并时间复杂度是一个瓶颈,这是就要引入左偏树(Leftist Tree),其实二项堆和Fibonacci堆也是很优秀的可并堆,这里只讲其中的左偏树。左偏树定义:左偏树是一种可并堆的实现,左偏原创 2017-09-03 21:11:19 · 822 阅读 · 2 评论 -
BZOJ4003 城池攻占
题目在这里呀一开始只会傻傻地打暴力。暴力打完想了想感觉可以用倍增乱搞一下。那时候想的倍增无法修改武力值,于是感觉可以做ai=0,vi=0的点。用倍增求出f[i][j]表示i点向上2^j步内所有节点上防御值的最大值然后就可以用类似于二分的方法去求啦~纯属口糊,打代码的时候都打错了,所以跳过这个方法啊,去看正解。满分其实有两种方法。一种就是倍增(我还没搞懂,下次原创 2017-12-30 21:49:29 · 276 阅读 · 0 评论 -
luogu 3377 可并堆
题目描述如题,一开始有N个小根堆,每个堆包含且仅包含一个数。接下来需要支持两种操作:操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删除或第x和第y个数在用一个堆内,则无视此操作)操作2: 2 x 输出第x个数所在的堆最小数,并将其删除(若第x个数已经被删除,则输出-1并无视删除操作)输入输出格式输入格式:第一行原创 2017-09-03 20:15:01 · 305 阅读 · 0 评论