「NOIP Record」#2 基环树
突破口永远在环上。 找环是常用操作,但是并没有一个合适的模板。 笔者在写这篇文章之前就做过一些基环树的简单题,但是每一次写的找环都不尽相同。仅仅用dfs的回溯模拟一个栈,显然是不够公式化的,且容易出 bug,因此我们需要确定一种可靠的写法。 关于dfn的那套理论再合适不过了。 当然这玩意只能找一个环。 int cnt, num, fa[N]…
「NOIP Record」#1 树形DP(1)
树形 DP 计数。 luogu8867 建造军营 对于图中一条非割边,看守与否都相同,因此可以用 Tarjan 算法求出边双再缩点,把非树边单独拿出来,讨论每一条树边。 然而貌似不是很好做,子树外是否建造会影响子树内。考虑设 $f_x$ 为军营只在以 $x$ 为根的子树中出现,且至少存在 $1$ 个军营的方案数。 转移时对于边 $(x,y)$,如果…
「数据结构学习笔记」#3 树链剖分
树链剖分能够将一棵树按照某种法则剖分为若干条链,从而便于维护树上路径的信息。 按照剖出链的法则不同,其性质也不同,大体可将树剖分成重链剖分,长链剖分和用于 Link-Cut Tree 的剖分(实链剖分)。 其中重链剖分用途最广泛,本文也只介绍重链剖分。 重链剖分 定义与部分性质 给出如下定义 重儿子。对于一个非叶子节点,其重儿子为其以它的所有儿子为…
「数据结构学习笔记」#1 线段树相关
线段树上二分 用形式化的语言讲,线段树上二分求解的是这一类问题。 给定 $L$,找到一个 $R \in [L,n]$ 满足$$f \Big( op\big([L,R-1]\big) \Big) = 1$$$$f\Big( op\big(R\big) \Big)=0$$ 其中 $f$ 为某种合法性函数,$op$ 是将区间信息合并为 $f$ 能处理的信…