「考试」省选23

好难啊。。。

T1
代码不打算写了。
连续期望真的恶心死了。

T2
总之是一个矩阵乘法来优化\(dp\)的过程。
然后矩阵和逆矩阵长得特别好看,可以优化维护。
这样复杂度就被优化下来了。

T3
讲了一次了,不过似乎大家都没有听懂。
详细的复读一次。
这个题是构造题。
首先题意转化。
我们发现一个\(E\)的序列的形成过程中任意时刻的图都可以对应为一个大小为\(i\)大强连通分量和\(n-i\)个单独的点的形式。
因为只有一个强连通所能到达的状态是最多的,这样我们求出这种图的方案就是\(E\)序列的方案。
然后设\(dp[e][i]\)为大强联通有\(i\)个点,总共有\(e\)条边的方案数。
转移很简单,枚举一个新圈即可:

\[dp[e][i]=dp[e-1][i]+\sum\limits_{j=0}^{i-1}dp[e-1][j] \]

关键是要判断这个状态是否合法。
怎么判断?
发现状态里面没有记录边数。
只需要判断边数是否合法即可。
设当前状态的图中最少和最多的边数分别为:\(L_i,R_i\)
合法的判断就是:\(e\in[L_i,R_i]\)
\(R_i\)很好求。
分别考虑大强连通内部形成完全图+其余点形成满边\(DAG\)+强连通内部和外部连边,这样构造出的边数一定最多。
那么:

\[R_i=i(i-1)+\sum\limits_{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]+\sum\limits_{k=0}^{i-1}dp[e-1][k][j-1] \]

这样表示新枚举一个圈进去。
那么设:

\[g[e][i][j]=\sum\limits_{k=0}^{i}dp[e][k][j] \]

得到:

\[dp[e][i][j]=dp[e-1][i][j]+g[e-1][i-1][j-1] \]

这是一个前缀和优化。
复杂度就正确了,是:\(O(n^4)\)

posted @ 2020-02-12 14:16  Lrefrain  阅读(169)  评论(0编辑  收藏  举报