随笔分类 -  数据结构

摘要:LCT神题... 首先暴力的做法就是每次在一个区间上link,然后暴力查询,时间复杂度O() 但是我们可以发现的是,每棵树之间互不影响! 因此我们可以考虑离线之后分别统计每棵树 但是这样做其实并没有优化时空啊! 但是等等,我们在考虑一下:我们的操作都是区间操作,也就是说我们可以用一个类似差分 阅读全文
posted @ 2019-07-12 10:54 lleozhang 阅读(302) 评论(0) 推荐(0) 编辑
摘要:并查集水题 离散化之后直接并查集合并,在不等时判断两者是否在同一个集合內即可 注意排序 贴代码: 阅读全文
posted @ 2019-07-12 09:26 lleozhang 阅读(267) 评论(0) 推荐(0) 编辑
摘要:思想基本同bzoj 2594,但是多了一步 首先我们发现这时的边有两个属性了,因此我们考虑先去掉其中一者的限制 我们把所有边按a大小排序,然后从小到大加入维护的最小生成树 每次加边时都按照b的大小操作bzoj 2594,然后更新答案即可 如果始终不联通输出-1 阅读全文
posted @ 2019-07-10 16:15 lleozhang 阅读(223) 评论(0) 推荐(0) 编辑
摘要:很好的一道LCT题目 首先我们可以发现,题目要求的就是最小生成树上的一条树链的最长边的长度,因此我们实际只需动态维护最小生成树即可 然后我们考虑怎么动态维护最小生成树 不难发现,如果涉及在最小生成树上删边,那么这个操作将变得非常复杂,因为我们并不知道删边之后要把什么样的边补充回去才行 但是,如果我们 阅读全文
posted @ 2019-07-10 16:12 lleozhang 阅读(166) 评论(0) 推荐(0) 编辑
摘要:LCT好题 首先我们考虑实际询问的是什么: 从LCT的角度考虑,如果我们认为一开始树上每一条边都是虚边,把一次涂色看作一次access操作,那么询问的实际就是两个节点间的虚边数量+1和子树中的最大虚边数量! 这种问题显然树上容斥,如果设disi表示i到根节点需要经过多少虚边,那么答案显 阅读全文
posted @ 2019-07-10 12:43 lleozhang 阅读(178) 评论(0) 推荐(0) 编辑
摘要:LCT板子题... 看到题目中的操作很显然是从ii+ki连一条边,每次修改就是删除原来的边再加入一条新的边嘛 然后考虑查询:对于被弹飞的部分,我们统一新建一个节点n+1,把所有越过边界的部分指向这个节点即可 然后在查询的时候只需要拎出查询节点到n+1节点的树链,统计其大小即可 阅读全文
posted @ 2019-07-10 10:55 lleozhang 阅读(199) 评论(0) 推荐(0) 编辑
摘要:真·小清新... 其实本题正解是动态点分治,但是考虑到那个东西需要先大力推导一波再套上一个幻想乡战略游戏的搞法,所以还不如大力推导一波,然后无脑套上一个树剖+线段树写法... 首先我们考虑没有换根操作: 没有换根操作时,设每次修改的变化量为δ,很显然每次修改时只会影响一条树链上的贡献, 阅读全文
posted @ 2019-07-10 08:57 lleozhang 阅读(163) 评论(0) 推荐(0) 编辑
摘要:首先仍然是点对之间的问题,让我们考虑点分 由于带修改,所以考虑动态点分治 所谓动态点分治,就是在操作之前先模拟一遍点分治的过程构造出一棵新的树,我们称这棵树为点分树,由于这棵树树高是对数级别的,所以修改的时候可以在一条树链上暴力修改 然后考虑本题怎么维护: 首先我们考虑答案如何统计:在统计答案时,我 阅读全文
posted @ 2019-07-09 19:23 lleozhang 阅读(215) 评论(0) 推荐(0) 编辑
摘要:神题啊... 首先我们考虑68分的暴力: 对于询问串的每个位置i,我们维护一个limi表示以i为终点向前至多能与模式串匹配多长,这一点可以在把询问串放在模式串的后缀自动机上跳跃得到 接下来考虑统计答案: 对于询问串同样建起一个后缀自动机,我们知道后缀自动机上的每个节点维护的位置是一 阅读全文
posted @ 2019-07-05 20:48 lleozhang 阅读(171) 评论(0) 推荐(0) 编辑
摘要:线段树优化建图板子题 首先暴力建图显然是不可取的,但是我们发现建图要求是点和区间之间的问题,所以考虑用线段树优化 但是怎么优化呢? 如果用一棵线段树很难处理同时出边和入边,因此我们考虑用两棵线段树(类似拆点),一棵线段树作为起点,另一棵线段树作为终点,然后在两棵线段树之间连边即可 这样的话连边的方式 阅读全文
posted @ 2019-07-04 11:01 lleozhang 阅读(454) 评论(0) 推荐(0) 编辑
摘要:首先用splay维护嘛 然后查询的时候就把对应的节点转到根,左子树大小就是排名 然后再做个区间翻转即可 阅读全文
posted @ 2019-07-02 19:58 lleozhang 阅读(147) 评论(0) 推荐(0) 编辑
摘要:splay裸题嘛... 直接按书的编号顺序建splay,然后维护即可 把移动位置变成插入和删除 阅读全文
posted @ 2019-07-02 13:10 lleozhang 阅读(120) 评论(0) 推荐(0) 编辑
摘要:首先是动态dp了嘛... 然后考虑怎么做:首先列出dp方程,大概长这样: f[i]=min(v[i],f[to]) 看着不太像动态dp呀... 考虑拿出重儿子的贡献,然后套模型,大概能构造出一个这样的东西: 设gi=fto[to!=son] $\begin{p 阅读全文
posted @ 2019-07-02 08:40 lleozhang 阅读(194) 评论(0) 推荐(0) 编辑
摘要:首先我们考虑事件发生的真正的先后顺序 我们考虑在某一个点f的子树内有两点ij先后在ti,tj两个时间向上发送信息 那么两者谁会先传到f呢? 推个小式子:设i先到达f,那么一定要满足的条件是depidepf+ti<$dep_{j}- 阅读全文
posted @ 2019-07-01 10:15 lleozhang 阅读(262) 评论(0) 推荐(1) 编辑
摘要:首先有个思想,就是逐层更新 然后考虑每次查询是查从某一点到根节点的树链上的信息,因此用树链剖分维护即可,处理每个点的对子树中节点的贡献可以区间修改(只需修改这一节点向上的树链即可),然后查询时区间查询,去掉不合法的部分即可 时间复杂度O(nlog22n),其实本题正解应当是$O(nl 阅读全文
posted @ 2019-06-28 11:17 lleozhang 阅读(222) 评论(0) 推荐(0) 编辑
摘要:好神奇的数据结构呀... 首先我们考虑:暴力怎么做? 设状态dp[j]表示长度为j的序列最后一个数最小是几,如果j位置的限制区间为[l,r],那么显然有转移: dp[j]=l(dp[j1]<l) dp[j]=dp[j1]+1(ldp[j1]r1) 阅读全文
posted @ 2019-06-28 10:08 lleozhang 阅读(197) 评论(0) 推荐(0) 编辑
摘要:去年noip题啊... 这题动态dp裸题,因此直接套上去嘛! 动态dp板子看这里 设状态f[i][0/1]表示点i选/不选的最小花费,转移有 f[i][0]=f[son][1] f[i][1]=wi+min(f[son][0],f[son][1]) 同样设一 阅读全文
posted @ 2019-06-26 20:37 lleozhang 阅读(129) 评论(0) 推荐(0) 编辑
摘要:动态dp是一个毒瘤且奇葩的东西... 然而noip2018出了这个东西... 因此... 以一道题为例吧:给出一棵带点权的树,每次修改一个点的点权,查询这棵树的最大权独立集(可以理解为每次询问一遍“没有上司的舞会”) 首先考虑暴力: 设状态f[i][0/1]表示以i为根的子树,点i选或不 阅读全文
posted @ 2019-06-26 19:04 lleozhang 阅读(218) 评论(0) 推荐(0) 编辑
摘要:嗯.. 首先考虑如果只有一次询问我们怎么做 设我们当前有个数集{S},进行这一询问,我们怎么处理? 首先不妨假设{S}单调不降(如果不是这样的话显然排序并不会影响答案) 那么假设前i个数都合法,其能组合出的最大的值为lim,那么我们只需比较Si+1lim+1的大小就可 阅读全文
posted @ 2019-06-26 11:14 lleozhang 阅读(158) 评论(0) 推荐(0) 编辑
摘要:首先吐槽一下bzoj,这CF原题还做成权限题啊?! 需要注意的是,一个点不能被选中当且进当这个点在第y+1年到现在这一段时间内受到攻击,其余的点都可以被选 然后...其实这题的重点在于...码 思想很简单,先树链剖分,然后建起一棵主席树维护,每次修改就生成一个新版本,这样的话用现在的版本-时刻y的版 阅读全文
posted @ 2019-06-26 09:52 lleozhang 阅读(168) 评论(0) 推荐(0) 编辑

levels of contents
点击右上角即可分享
微信分享提示