午睡考试,白浪费了一套题,说实话这套题是真的不错,出题人的提示思考方向明确,暴力分数友好,考察的知识点也很基础
A. 贝尔数
标签:
CRT+矩阵快速幂
题解:
出题人挺良心的,给了最重要的两个式子,考虑对mod数分解,每个质数做一发CRT,
由于n很大,所以要用矩阵乘优化,注意B[p*2-1]的转移是两层
B. 穿越广场
考场上$ O(n^4) $的暴力过了20w组对拍,但是n,m读反了导致遗憾爆零,引用某yh的话:
没想到你的思维那么僵化
但经过我的强(feng)烈(kuang)谴(chui)责(da)他现在已经不会这么说了
标签:
AC自动机+Dp
题解:
50分的Dp定义了f[i][j][k][L]代表i个'R',j个'D',s[0]匹配了k位,s[1]匹配了L位的方案数,KMP预处理nxt数组Dp即可
重点在于如何优化这个Dp:
考虑对于s[0]和s[1]建一个AC自动机,
之后设dp[i][j][k][0/1/2/3]代表选了i次,j个'R',现在在AC自动机上的k节点,最后一维是匹配的状态
这样复杂度就变成了$ O(n^3) $了
C. 舞动的夜晚
标签:
最大流+Tarjan
题解:
首先用Dinic求出一组最大匹配,之后建一张新图:
(直接引用题解啦,描述太麻烦)
匹配边(i,j) j到i连边
非匹配边 (i,j) i到j连边
匹配的左点i (i,S)
不匹配的左点i (S,i)
匹配的右点j (T,j)
不匹配的右点j (j,T)
之后Tarjan缩点,对于每一条非匹配边来说,两个端点不在一个SCC内即为不合法边,简单证明一下:
设这条非匹配边为(i,j),vis[i]代表i是否匹配,显然当vis[i]&vis[j]==0时有SCC则一定合法,
对于vis[i]==vis[j]==1的情况,我们可以像匈牙利算法一样找到(也可能没有)曾广路,转化为上述问题