2024.8 #6

T1. [AGC060F] Spanning Trees of Interval Graph

我们令 S=Ci,j

我们设两个矩阵 Bi,j=[[Li,Ri][Lj,Rj]] 以及 Ai,i=Bi,j

那么根据矩阵树定理,我们知道生成树的数量就是 det(AB)。然而直接高斯消元复杂度是 O(S3) 的,难以接受。我们需要考虑如何优化 A

考虑矩阵行列式引理,我们需要构造出两个 (S1)×m 的矩阵 A,B,使得 G=A×BT,那么根据矩阵行列式引理:det(DG)=det(IBTD1A)det(D),其中 I 为单位矩阵。接下来的问题就变成了如何构造大小为 (S1)×m 的矩阵 A,B

为了求出 A,B 后方便计算答案,我们令 m=2×n1

那么此时我们考虑用两个点来表示两个区间是否有交,不难发现其实就是相交的点数减相交的边数是否为 1。那么 F,G 的构造如下:

  • Fi,2×j1=Gi,2×j1=[j[Li,Ri]]

  • Fi,2×j=1×[[j,j+1][Li,Ri]]

  • Gi,2×j=[[j,j+1][Li,Ri]]

那么我们就可以直接利用高斯消元 O(m3) 求出行列式的值。

T2.HAOI 2017 字符串

我们先考虑如何判断两个字符串 a,b 相似。很明显,条件为 |a|=|b|LCP(a,b)+LCS(a,b)+k|a|。其实就相当于把 b 中一个长度为 k 的子串换成通配符后和 a 相等。

此时我们可以考虑容斥,对于每一个 pi,我们枚举长度为 kk1 的区间换乘通配符,然后求出换完后的字符在 s 中的出现次数。然后通过一些计算就可以得出答案了。

具体的,我们对字符串的正串和反串建出一个 AC 自动机,并且记录文本串每一个每一个位置在 AC 自动机上的节点。

由于换成通配符之后,只剩下一个 pre 和一个 suf,一个 j 对于答案有贡献的要求就是 s 中以 j 为开头长度为 |pre| 的子串等于 pres 中以 j+|pre|+k 为开头,长度为 |suf| 的子串等于 suf。我们的任务就是求出这样的 j 的个数。

那么这个条件转移到树上就变成了 spos 为结尾的后缀在 AC 自动机上的节点在 fail 树上在 pi 的前缀 j 在 AC 自动机上的节点子树之中。这是前缀的情况,后缀的情况同理。

那么我们只需要把 在某个点的子树内 这个限制转化为 DFS 序在某个区间内 这个限制,这样我们就可以使用二维数点来解决了。

posted @   sqrtqwq  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示