[HEOI2013] SAO

Description

给定一幅有向图,若忽略边的方向,其形态为一棵树,问其拓扑序的方案数。

N105,M=N1

Analysis

我们DP的思路是,对于一个限制 (u,v) ,要么是 u v 前,要么是 u v 后,在状态里面我们设 u 所在的位置为 j ,则我们要限制 v j 前或后。

fi,j 为结点 i 在其子树的序列中排第 j ,考虑某个儿子 ch (树上的),合并 ch i 所在序列,使得生成一个新序列,转移的思路是枚举 ch 所在序列,看其有多少插在 j 前。

ch 要在 i 前,具体地,因为 j 往后变成了 j ,所以有 jj 的位置提供给了 ch 所在的序列,而要限制 ch i 前, ch 在其序列的位置必须在 jj 前,当然 sum 包括了 |ch|
fi,j=fi,j×(jjk=1fch,k)×(j1jj)×(sumj|ch|(jj))

ch i 后,唯一不同的是 ch 的位置要在 jj+1 后。
fi,j=fi,j×(|ch|k=jj+1fch,k)×(j1jj)×(sumj|ch|(jj))

时间复杂度: O(N3) 。因为状态较稀疏,所以本算法可以通过本题。

你可能感兴趣的:(dp)