05 2016 档案
摘要:显然做完操作后再做操作。 建立一个个点的有向图,每个点只有一条出边,->表示最终变成了,边权为一开始是,最后不是的位置个数,如果,则代价还要增加。 对于每个点贪心选取最小的出边,如果没有环,那么此时就是最优解。 否则,对
阅读全文
摘要:对于每个点维护两棵线段树: 维护子树内,深度在内的点数,同种颜色有多个的话,保留深度最小的那个。 维护子树内每种颜色的最小深度。 从底向上合并线段树,先合并,然后合并的时候,发现有重复点,那么在里
阅读全文
摘要:首先剔除所有从不可到达的点,然后用Lengauer-Tarjan算法建立出以为起点的Dominator Tree。 那么对于每个询问,求出那些点的父亲的LCA,那么答案就是LCA到根路径上点权的最小值。 时间复杂度。
阅读全文
摘要:外层维护权值线段树,内层维护kd-tree。 修改的时候只往右儿子里插入,不平衡的时候替罪羊式重构。 查询的时候在外层线段树上走,在内层kd-tree上查询矩形内点数即可。 时间复杂度。
阅读全文
摘要:扫描线,从左到右依次处理每棵树。 用set按时间顺序维护影响了这棵树的所有操作,那么一个点的父亲就是它前面第一个操作1。 用Splay维护树的括号序列,那么两点间的距离就是括号数量减去匹配的括号个数。 添加或删除操作0就是单点换父亲,添加或删除操作1就是区间换父亲。可以通过添加虚点来实现区间换父亲操
阅读全文
摘要:一个长度为的串在树上匹配有两种情况: 1.在LCA处转弯,那么这种情况只有次,暴力提取出长度为的链进行KMP即可。 2.不转弯,那么可以拆成两个到根路径的询问。 对所有串的正反串建立AC自动机,求出fail树上每个点的DFS序。 然后DFS原树,记录在AC自动机
阅读全文
摘要:考虑反面,用状压DP求出不合法的方案数。 设表示填到了,轮廓线上每个位置作为末尾是否完全匹配第一个串的状态为,与第一个串kmp到了,与第二个串kmp到了的方案数。 然后直接转移即可。 时间复杂度
阅读全文
摘要:树的点分治,每次求出重心后,求出重心到每个点路径上的数的线性基。 对于每个询问,只需要暴力合并两个线性基即可。 时间复杂度。
阅读全文
摘要:建立ST表,每层维护一个并查集。 每个信息可以拆成两条长度为的幂次的区间相等的信息,等价于ST表里两对点的合并。 然后递归合并,一旦发现已经合并过了就退出。 因为一共只会发生次合并,所以时间复杂度为。
阅读全文