模拟80 题解
A. 贝尔数
这个数据范围,似乎显然是矩阵快速幂。
对模数质因数分解就会发现每个质因子只出现一次且很小。
所以考虑求出mod每个质因子的结果并crt合并。
题中已经给出了贝尔数在模p意义下的一个公式,
所以直接保存p个贝尔数,矩阵快速幂转移就可以了。
B. 穿越广场
刚开始想了一些类似卡特兰数的dp+枚举重合部位的方法。
然后发现去重似乎并不简单,于是放弃了。
然后想到了用kmp进行dp转移,然后发现十测仍然过不去。
然后就想到了AC自动机进行dp转移。
设dp(i,j,k,0/1,0/1)表示到节点i,选了j个0,k个1,是否与串1匹配过,是否与串2匹配过。
分别选0和选1的转移就可以了。
C. 舞动的夜晚
问题是二分图最大匹配的可行边集。
暴力做法是,删去每条边然后重新跑一遍最大匹配。
考场上大概想到了正解要用残流网络,然后就不会了。
在跑出任意一个最大匹配之后,形成一个残流网络。
对该残流网络中有流的边进行tarjan缩强联通分量,然后依次考虑每一条边。
如果该边是满流的边,显然是可行边。
如果该边没有流满并且连接的两个点在同一scc中,那么该边是可行的边,
因为该操作减少了一个匹配,但由于存在环,可以将整个环上的边取反,增加一个匹配,达到增广的效果。
如果该边没有流满并且连接的两个点不在同一scc中,那么该边不是可行的边,
因为该操作导致了无法进行增广,就无法形成最大匹配。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步