【题解】ABC252G - Pre-Order

题意

给定一个 1N 的排列 P,求 dfs 序为 P 且以 1 为根的有根树的数量(答案模 998244353

注意对于有多个子结点的结点,按编号从小到大遍历子结点。

2N500

思路

区间 dp。

考虑设 dp[l][r] 为以 PlPr 组成,dfs 序为 [Pl,Pr] 且以 Pl 为根的有根树数量。容易想到枚举最后遍历的子树区间 [s,t],但是题目要求按编号升序遍历,因此难以判断合法性。

容易看到答案是 使 [s,t] 添加后 dfs 序不变的有根树数量 × [s,t] 组成的有根树数量。不妨考虑另外维护 dp[l][r] 表示将 Pr+1 添加到以 Pl 为根,由 [Pl,Pr] 组成的有根树后 dfs 序为 [Pl,Pr+1] 的方案数。易得:

dp[l,r]=lk<rdp[l][k]×dp[k+1][r]

dp[l,r]=lk<r,Pk+1<Pr+1dp[l][k]×dp[k+1][r]

边界条件是 dp[l][l]=dp[l][l]=1

时间复杂度 O(n3)

代码

posted @   kymru  阅读(83)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示
主题色彩