码迷,mamicode.com
首页 > 其他好文 > 详细

「考试」省选23

时间:2020-02-12 14:51:23      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:题意   序列   记录   有一个   考试   inline   limit   简单   spl   

好难啊。。。

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-1][k][j]\]
得到:
\[dp[e][i][j]=dp[e-1][i][j]+g[e-1][i-1][j-1]\]
这是一个前缀和优化。
复杂度就正确了,是:\(O(n^4)\)

「考试」省选23

标签:题意   序列   记录   有一个   考试   inline   limit   简单   spl   

原文地址:https://www.cnblogs.com/Lrefrain/p/12298908.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!