首页 > 其他 > 详细

P4099 [HEOI2013]SAO

时间:2019-03-30 10:43:53      阅读:121      评论:0      收藏:0      [点我收藏+]

题目链接

题目链接

这道题建出模型之后就是一个树形图

首先我们不考虑有向边的关系

而是直接考虑树形\(dp\)

关键是怎么个树形\(dp\)

我们维护\(dp[u][i]\)表示当前\(u\)节点在已经遍历的子树中拓扑序排名为\(i\)的情况数

那么接下来就是经典的做法 合并\(u\)和子树\(v\)

我们假设当前\(u\)已经维护好的序列中排名为\(i\)

当前子树\(v\)已经维护好的序列中排名\(j\)

1.合并之后\(u\)排名比\(v\)靠前 为\(k\)

那么\(i≤k≤i+j-1\)

\[dp[u][k]+=C_{k-1}^{i-1}* C_{siz[u]+siz[v]-k}^{siz[u]-i}* dp[u][i]* dp[v][j]\]

2.合并之后\(u\)排名比\(v\)靠后 为\(k\)

那么\(j+i≤k≤i+siz[v]\)

\[dp[u][k]+=C_{k-1}^{i-1}C_{siz[v]+siz[u]-k}^{Isz[u]-i}* dp[u][i]* dp[v][j]\]

有上述我们可以发现 枚举\(i,j,k\)\(O(n^3)\)

所以我们需要优化

可以发现在上述\(dp\)式子中 只用一项涉及到了\(j\)

所以我们在确定了\(j\)以及\(k\)的范围之后

切换枚举顺序可以使用前缀和优化

\[1≤i≤siz[u]\]

\[i≤k≤i+siz[v]-1\]

\[∵i≤k≤i+j-1\]

\[∴j≥k-i+1\]

\[1≤i≤siz[u]\]

\[i+1≤k≤i+siz[v]\]

\[∵j+i≤k≤i+siz[v]\]

\[∴j≤k-i\]

所以我们可以使用前缀和优化

P4099 [HEOI2013]SAO

原文:https://www.cnblogs.com/LovToLZX/p/10625176.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!