分析 "什么是左偏树" 先来考虑暴力做法,对于每个骑士都做一遍DFS,时间复杂度$O(NM)$,显然会T。 接着考虑一下优化,因为只有这么一棵树,并且,每个骑士不会相互影响,既然这样,那么就只跑一遍DFS,然后一起处理所有的骑士,是不是就可以了呢?但如果我们再遍历一下这个节点的骑士,好像还是没有优化 ...
分类:
其他好文 时间:
2020-05-21 09:22:50
阅读次数:
44
板子吧,左偏树合并是 1log 的,按照深度合并,而且可以打 tag,pushdown。 ...
分类:
其他好文 时间:
2020-05-02 19:00:52
阅读次数:
54
Solution 现在感觉自己的眼睛要瞎了。 我们发现这东西好像挺适合左偏树的啊:骑士在儿子节点死了就不会走到父亲节点,可以直接删去。 考虑到这条性质(而且城池本来就是树),我们在每个城池建一颗关于骑士的树,表示这一坨骑士都可以来到这个城池。 我们把最小值作为骑士的根,那么就可以删根然后统计城池的死 ...
分类:
其他好文 时间:
2020-04-03 16:42:24
阅读次数:
62
dfs时,用可并的小根堆去维护所有活下来的骑士;更新时就直接往外弹即可;然后堆上要维护乘法和加法标记。 2020.01.18 ...
分类:
其他好文 时间:
2020-01-19 19:14:14
阅读次数:
49
题意 有一棵树$n$个节点,每个节点有一个防御值,以及两个属性,表示一个骑士占领该节点后攻击值是加还是乘,有$m$个骑士,有初始位置和初始攻击值,如果攻击值大于该节点的防御值,就能占领该节点,然后更新攻击值,走到父节点,如果攻击值小于防御值,骑士就会死在该节点。 问每个骑士能占领多少个节点,以及每个 ...
分类:
其他好文 时间:
2019-09-01 12:37:38
阅读次数:
70
嘟嘟嘟 暴力不难想:一种是以每一个骑士为主,一步步向上爬直到死了;一种是以每一个城池为主,统计哪些骑士在这座城池中死了,然后剩下的骑士再转移到他的父亲节点。 考虑优化:因为城池构成了一个树形结构,相对于骑士来说结构比较固定。因此我们想办法优化第二个暴力:每一个节点建一个小根堆,一直弹出堆顶直到堆顶骑 ...
分类:
其他好文 时间:
2018-10-17 10:58:36
阅读次数:
158
https://www.lydsy.com/JudgeOnline/problem.php?id=4003 感觉就是……普通的堆啊(暴论),因为这个堆是通过递归往右堆里加一个新堆或者新节点的,所以要始终保持右边的堆比左边的堆小一些以保证复杂度,大概因为这个所以也叫左偏树吧。 这个题我最开始看错题目了 ...
分类:
其他好文 时间:
2018-03-28 16:54:40
阅读次数:
155
不得不说,这道题目是真的难,真不愧它的“省选/NOI-”的紫色大火题!!! 花了我晚自习前半节课看题解,写代码,又花了我半节晚自习调代码,真的心态爆炸。基本上改得和题解完全一样了我才过了这道题!真的烦。没事,那接下来我来完全把这道题搞透。 Part 1 理解题目 Part 2 解题思想 part 3 ...
分类:
其他好文 时间:
2018-03-24 20:39:50
阅读次数:
172
用左偏树模拟攻占的过程,维护最小值,最多入和出m次,每次log复杂度。 ...
分类:
其他好文 时间:
2018-03-02 14:39:07
阅读次数:
166
[BZOJ][1] [Luogu][2] sol 左偏树 骑士对于树上结点挂链,每次合并所有子树上的骑士后把所有攻击力小于城池防御值的骑士弹掉。 左偏树维护加乘懒标记 记得要pushdown delete的时候也要记得pushdown! code cpp include include includ ...
分类:
其他好文 时间:
2018-02-23 13:35:17
阅读次数:
151