摘要: 作者的题单本身叫“简单树论”,但是这里把“简单”隐去了。 kruskal 重构树 在做 kruskal 生成树时,我们将边权从小到大排序,若 \((u,v)\) 不连通,则加入这条边。 这个过程比较特别,考虑用一些结构来记录这个过程,于是有了 kruskal 重构树。 考虑每次加入一条边 \((u, 阅读全文
posted @ 2025-08-19 21:09 zzy0618 阅读(13) 评论(0) 推荐(0)
摘要: 线段树合并 P4556 [Vani有约会] 雨天的尾巴 /【模板】线段树合并 先差分离线,转化成单点加。如果暴力做的话然后我们能够得到 \(n\) 个大小为 \(10^5\) 维护每个数出现次数的桶。由于差分,我们还要做一个前缀和,显然不能暴力将桶相加。 考虑每个节点搞一个动态开点线段树替换桶,然后 阅读全文
posted @ 2025-08-19 21:09 zzy0618 阅读(6) 评论(0) 推荐(0)
摘要: 可持久化线段树 普通可持久化线段树 又称主席树。 单点修改线段树时,我们只会改动 \(\log n\) 个节点,因此对于这 \(\log n\) 个节点新建位置,就可以新建一个时间点的状态。 void update(int &p,int lp,int l,int r,int x,int y){ a[ 阅读全文
posted @ 2025-08-19 21:08 zzy0618 阅读(11) 评论(0) 推荐(0)
摘要: 计数题无处无处不在,方式五花八门。 前置知识 组合数。请注意上下位置,这是 \(n\) 个中选 \(m\) 个。 \[C^m_n=C(n,m)=\begin{pmatrix}n\\m\end{pmatrix}=\frac{n!}{m!(n-m)!} \]组合数递推。 \[C^m_n=C^{m-1}_ 阅读全文
posted @ 2025-08-19 21:08 zzy0618 阅读(17) 评论(0) 推荐(0)
摘要: 一、分块 我们发现,如果一片区域被完全覆盖,我们可以对这个整块打上标记,而如果没有完全覆盖,我们只能挨个加。设我们将序列平均分成了 \(B\) 块,对完全覆盖的整块我们最多做 \(O(B)\) 次打标记。对没有完全覆盖的部分,发现只有两端要暴力做,所以是 \(O(\frac{N}{B})\) 级别的 阅读全文
posted @ 2025-08-19 21:07 zzy0618 阅读(31) 评论(0) 推荐(0)
摘要: T1 想象学竞赛网站 CodeFancy 举办了 \(m\) 场比赛。你在 CodeFancy 上关注了 \(n\) 个账号,编号为 \(1\sim n\)。你知道这 \(n\) 个账号分别参加了 \(m\) 场比赛中的哪些。但是你发现可能存在一个人使用多个账号的情况,你想知道这 \(n\) 个账号 阅读全文
posted @ 2025-08-18 11:15 zzy0618 阅读(38) 评论(0) 推荐(0)
摘要: 模拟赛——连续段的价值 定义字母 \(c\) 的连续段为:字符串 \(s\) 中的某个子串,子串的每个字符都为 \(c\)。 定义 \(f_i\) 表示第 \(i\) 种字母的所有连续段的最长长度。如果该字母没有出现,则 \(f_i\) 为 \(0\)。 蜗蜗有一个长度为 \(n\) 的字符串 \( 阅读全文
posted @ 2025-08-18 08:16 zzy0618 阅读(27) 评论(0) 推荐(0)