前言
注意到这个题没想到点子上, 于是进行记录
思路
分析题目 + 基本性质
不难想到借用 \(\rm{bfs}\) 树来解决
于是深度分析 \(\rm{bfs}\) 树的性质
首先是原图中究竟哪些边影响了 \(\rm{bfs}\) 树
不难发现对于点 \(u\), 对于其 \(\rm{bfs}\) 树上的父亲 \(v\), 对于 \(\rm{bfs}\) 序上 \(v\) 之前的点, \(u\) 都不能和其相连
其次就是对于点 \(u\), 它的儿子有什么性质
不难观察到其儿子们一定是一个 \(\rm{bfs}\) 序上的连续段, 但是还有一个重要性质, 即这些儿子的编号应当是递增的
因此问题转化为求所有合法的 \(\rm{bfs}\) 树, 并要求在过程中维护方案数
转化用于做题
不难发现维护点 \(u\) 时, 我们应该需要知道其 \(\rm{bfs}\) 树上的父亲 \(p\) 的 \(\rm{bfs}\) 序
于是设计 \(f_{u, p}\) 表示当前维护到了点 \(u\), 其 \(\rm{bfs}\) 树上的父亲为 \(p\) 的方案数
怎么转移?
不难发现 \(f_{u, p}\) 应当由其 \(\rm{bfs}\) 序上的前一个转移而来, 记为 \(v\)
但是 \(v\) 和 \(u\) 不一定是一个父亲, 如果 \(A_u \geq A_v\), 那么是可以并入一个父亲 \(p\) 的, 否则只能是 \(p\) 的前一个位置 \(p'\)
然后就出意外了
「否则只能是 的前一个位置 」 是否正确
显然是不正确的, 例如这种情况
也就是说, 只要 和 是同段的, 就行
正确转移
这样我们可以写出一个转移
有
不难发现前缀和可以优化到 \(\mathcal{O}(n^2)\)
具体不是这个式子, 但是就是这么个意思
总结
拿几个维度表示状态的 \(\rm{dp}\), 往往根据需要的信息设计状态