「考试」省选23

Posted lrefrain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「考试」省选23相关的知识,希望对你有一定的参考价值。

好难啊。。。

T3
讲了一次了,不过似乎大家都没有听懂。
详细的复读一次。
这个题是构造题。
首先题意转化。
我们发现一个(E)的序列的形成过程中任意时刻的图都可以对应为一个大小为(i)大强连通分量和(n-i)个单独的点的形式。
因为只有一个强连通所能到达的状态是最多的,这样我们求出这种图的方案就是(E)序列的方案。
然后设(dp[e][i])为大强联通有(i)个点,总共有(e)条边的方案数。
转移很简单,枚举一个新圈即可:
[dp[e][i]=dp[e-1][i]+sumlimits_{j=0}^{i-1}dp[e-1][j]]
关键是要判断这个状态是否合法。
怎么判断?
发现状态里面没有记录边数。
只需要判断边数是否合法即可。
设当前状态的图中最少和最多的边数分别为:(L_i,R_i)
合法的判断就是:(ein[L_i,R_i])
(R_i)很好求。
分别考虑大强连通内部形成完全图+其余点形成满边(DAG)+强连通内部和外部连边,这样构造出的边数一定最多。
那么:
[R_i=i(i-1)+sumlimits_{j=1}^{n-i}(j-1)+i(n-i)=i(i-1)+(n-i)(n-i-1)/2+i(n-i)]
但是发现(L_i)不是很好求。
关键在于大强联通套了几个圈上去我们无法计数。
所以给(dp)加一维:
(dp[e][i][j])表示图中总共有(e)条边,大强连通分量中有(i)个点,(j)层圈的方案数。
这样我们就可以求出(L_{ij})了。
[L_{ij}=i+j-1]
这个是怎么构造的呢?
我们考虑让每条边的价值应用到最大。
那么最优决策的一种一定是:让(i-j)个点作为基础,剩下(j)个分别作为新缩进去的的(j)层。
这样的话边数最少就是:(L_{ij}=(i-j-1)+2j=i+j-1)
这样就可以清楚判断条件了。
其中(R_{ij}=R_i)
那么紧接着再次考虑转移:
[dp[e][i][j]=dp[e-1][i][j]+sumlimits_{k=0}^{i-1}dp[e-1][k][j-1]]
这样表示新枚举一个圈进去。
那么设:
[g[e][i][j]=sumlimits_{k=0}^{i}dp[e-1][k][j]]
得到:
[dp[e][i][j]=dp[e-1][i][j]+g[e-1][i-1][j-1]]
这是一个前缀和优化。
复杂度就正确了,是:(O(n^4))

以上是关于「考试」省选23的主要内容,如果未能解决你的问题,请参考以下文章

「考试」省选56

「考试」省选24

「考试」省选26

「考试」省选25

「考试」省选82

[考试反思]0214省选模拟24:揣测