[HEOI2013] SAO

来源:互联网 发布:android 网络代理开发 编辑:程序博客网 时间:2024/05/07 20:36

Description

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

N105,M=N1

Analysis

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

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

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

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

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

0 0
原创粉丝点击