随笔分类 - 

[VIJOS2053][SDOI2019]世界地图:最小生成树+虚树
摘要:分析 可以发现第一列和最后一列永远不会被删除,于是我们可以想到维护前后缀最小生成树,但是直接维护的话显然时间空间两爆炸。(通过上网找题解)可以发现我们关心的只是最左边和最右边两列,而不关心内部的连边情况。所以我们可以仅维护这两列的节点在最小生成树上形成的虚树,边权是对应链上最大的边权,合并时对两棵虚 阅读全文

posted @ 2019-05-08 18:00 ErkkiErkko 阅读(488) 评论(0) 推荐(0)

[LOJ3046][ZJOI2019]语言:树链的并+线段树合并
摘要:分析 问题显然可以转化为对于每个节点询问所有这个节点的所有链的链并的大小。 考场上我直接通过树剖打标记+树剖线段树维护以$O(n \log^3 n)$的时间复杂度暴力实现了这个过程。(使用LCT或者全局平衡二叉树可以实现$O(n \log^2 n)$的时间复杂度) 考虑如何快速求出链并的大小,有这样 阅读全文

posted @ 2019-05-08 08:16 ErkkiErkko 阅读(336) 评论(0) 推荐(0)

USACO2018DEC PLATINUM
摘要:就按(博主认为的)难度顺序排吧。 Sort It Out 分析 容易发现选出的集合一定是所有逆序对的一个最小覆盖集,那么剩下的就一定是一个LIS。仔细想想还可以发现字典序第$k$小的最小覆盖集的补集一定是字典序第$k$大的LIS,所以找到这个序列字典序第$k$大的LIS就好了。 代码 The Cow 阅读全文

posted @ 2019-03-07 20:37 ErkkiErkko 阅读(257) 评论(2) 推荐(0)

[BZO3572][HNOI2014]世界树:虚树+倍增
摘要:分析 思维难度几乎为$0$的虚树码农(并不)题。 代码 cpp include define rin(i,a,b) for(register int i=(a);i=(b); i) define trav(i,a) for(register int i=head[a];i;i=e[i].nxt) d 阅读全文

posted @ 2019-02-15 12:02 ErkkiErkko 阅读(225) 评论(0) 推荐(0)

虚树总结&题单&简要题解
摘要:简介 虚树,即剔除所有无关结点,只保留询问点和询问点的相关结点(两两之间的LCA),建一棵新树,这棵新树就是虚树。通过虚树,可以有效的减小询问(甚至修改)的复杂度。设询问点的个数是$k$,那么建虚树的一般方法的时间复杂度为$O(k \log k)$。 构建方法 1. 把所有询问点按dfs序排个序。 阅读全文

posted @ 2019-01-17 21:46 ErkkiErkko 阅读(326) 评论(0) 推荐(0)

动态淀粉质(划掉)题单&简要题解
摘要:简介 动态点分治的思想:还不太清楚诶怎么办。 大概是通过降低树高来降低每次修改和询问的复杂度吧,还可以把树上一个连通块的信息统计到一个点(重心)上。具体实现方式和普通的静态点分治没有太大的区别,只是把点分治时递归到的每层重心用边连起来(当然不是在原树中直接连),构成一个叫做点分树(VPT)的东西,它 阅读全文

posted @ 2018-12-24 22:08 ErkkiErkko 阅读(272) 评论(0) 推荐(0)

长链剖分优化树形DP总结
摘要:长链剖分 规定若$x$为叶结点,则$len[x]=1$。 否则定义$preferredchild[x]$(以下简称$pc[x]$,称$pc[x]$为$x$的长儿子)为$x$的所有子结点$ver$中,$len[ver]$最大的一个。$len[x]=len[pc[x]]+1$。 这里的$pc[x]$相当 阅读全文

posted @ 2018-11-22 21:40 ErkkiErkko 阅读(1514) 评论(0) 推荐(2)

Dsu on Tree总结
摘要:Dsu on Tree(树上启发式合并) 关于Dsu? 并查集(亦称Ufs)。 然而本算法和并查集并没有半毛钱关系。 有什么用? 可以在$O(nlogn)$的时间复杂度内解决大部分不带修改的子树信息查询问题。 算法过程? 一个dfs,可能还需要写一个辅助函数Add。 简述一下算法过程: 假设现在df 阅读全文

posted @ 2018-11-22 20:13 ErkkiErkko 阅读(228) 评论(0) 推荐(0)