图论小专题B
2 树 2.1 树的定义 一个只有 \(N-1\) 条边,且任意两个点连通的图叫做树。通过这样定义的树往往是一棵无根树,而我们通常会任意选定一个根节点使其变成有根树。有根树可以定义“父亲和儿子”的层次关系,这往往有利于构造最优子结构,进行DP和搜索等操作。 特别的,如果在树上任意加上一条边,那么整个树上就会多出一个环。我们称这样的树是“基环树”。基环树不是树,但是它只有一个环。将整个环作为一个“广义根”,然后将根和连在环上的子树分开处理,同样可以套用树的许多算法。 2.2 树上的DP算法 通常选定一个根,然后用DFS计算。至于递归接口应该放在转移之前还是之后呢?那就看方程怎么写了。在写程序的时候,只要满足“已知推未知”的原则就行。 如果给定一棵无根树,答案要求给出最优的根使得某个值最优化,这时可以采用“换根法”。先任意选定一个根计算出规划值 \(F_1\) ,然后从数学上推导出以任意点为根的规划值 \(F_2\) 。《进阶指南》上有相关的例题。 2.2.1 树的参量 子树大小size 最基础的量。转移方程简记为 \(F(x)=1+\sum F(\text{son}(x))\) 树的重心 和size一样。如果子树 \(x\) 的大小是 \(\text{size}(x)\) ,那么剩下树的大小就是 \(N-\text{size}(x)\) 。在求 \(\text{size}\)