点分治

介绍 点分治用于处理 树上的路径问题。 点分治的主要思想是,对于一棵子树,子树内的所有路径只有两种情况: 不经过根节点 经过根节点 对于第一种,我们可以

树状数组二分

这篇 blog 记录一个树状数组上二分的小技巧。 介绍 对于树状数组,我们知道它支持 O(logn) 内进行如下操作: 单点修改 前缀和查询 现在我们希望它用 O(logn) 支持第三种操

树同构

介绍 两个树同构 有且仅有一种重新编号方式,使得一棵树的节点重新编号后得到另外一棵树。 • 如果是有根树同构,那么还要额外加一个限制条件:树的节点

树的重心

定义 树的重心是指: 在一棵无权无根树中,对于每一个点 u,计算它所有子树中最大的子树的节点数,这个最大值最小的点 u 就是树的重心。 性质 点 u 为重

2019 Jakarta Regional

K. Addition Robot 题意 给定 n 个字母 s1,s2,sn,每个字母要么为 A 要么为 B。 现在有 Q 个询问,每个询问有两种类型: 1 L R:将 i[L,R] 的所有 A 改成 $

2021 NERC

CF1666J Job Lookup 题意 给定一个 n×n 的矩阵 cij。 求一个BST,使得 i,jcijdij 最小。 其中,dij 代表节点 i,j 在BST中的距离。 输出这个 BST

2022 NERC Regional

A. Access Levels 题意 有 n 个程序员,m 个文档。 给定一个 n×m 的矩阵 a,其中 aij=1 表示程序员 i 可以访问文档 j,否则不行。 现在我们需要选择一个数

线性规划

介绍 线性规划问题一般表示为如下: 给定 cj,aij,bi,求 x 的值使得 maxxj=1dcjxj 其中 j=1daijxjbi,i=1n xj0,j=1d 等价的,可以把上式写作: maxx cx

KMP

介绍 KMP算法能在 O(n) 的时间内,求出一个字符串的每个前缀的最长 border 长度。 利用 border 的性质,也可以在 O(n) 的时间内,求出一个字符串 t 在文本串 s 中出现的所有