洛谷P4099: [HEOI2013]SAO
原题链接: https://www.luogu.com.cn/problem/P4099
题解
由题意可知给出的是一棵树,考虑树上 d p dp dp 。
因为题目对拓扑序有限制,不妨设 f x , p f_{x,p} fx,p 表示拓扑遍历以 x x x 为根的子树, x x x 在拓扑序中第 p p p 位的序列数。考虑转移方程,假设目前已经遍历 x x x 的前 i − 1 i-1 i−1 个儿子,正在用第 i i i 个儿子 s o n son son 进行更新。
记:
- s o n son son 是当前正在更新的儿子
- s i z X sizX sizX 是 x x x 与其前 i − 1 i-1 i−1 个儿子构成的连通块的大小(原拓扑序长度)
- s i z S sizS sizS 是以 s o n son son 为根的子树的大小
- g x , p g_{x,p} gx,p 表示前 i − 1 i-1 i−1 个儿子更新的结果(与 f x , p f_{x,p} fx,p 作区分)
- p r e = p − 1 pre=p-1 pre=p−1 表示原来序列在 x x x 前的节点数
- s u f = s i z X − p suf=sizX-p suf=sizX−p 表示原来序列在 x x x 后的节点数
若边 ( s o n , x )