![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Ac自动机
stargazer.
夜を穿つの
展开
-
【Codeforces 917 E】Upside Down(Ac自动机 / 后缀数组 / 哈希 / border相关 / Kmp / Exgcd)
传送门至今写过最长的字符串题看起来和回忆树差不多但不能直接kmpkmpkmp了分成u→lca,lca→vu\rightarrow lca,lca\rightarrow vu→lca,lca→v和穿过lcalcalca分别考虑前面直接照搬回忆树的做法考虑穿过lcalcalca的求出u→lcau\rightarrow lcau→lca中最长的后缀满足是SSS的前缀的长度以及lca→vlca\rightarrow vlca→v最长前缀满足为SSS后缀的长度得到了可以直接利用borderborde原创 2020-05-20 20:18:20 · 616 阅读 · 0 评论 -
【Codeforces 590 E】Birthday(AC自动机 / 二分图匹配)
传送门建出AcAcAc自动机后即可求出串和串之间的偏序关系建成一个DAGDAGDAG然后做一次最长反链并输出方案即可#include<bits/stdc++.h>using namespace std;#define cs const#define re register#define pb push_back#define pii pair<int,int&g...原创 2020-04-23 11:10:39 · 244 阅读 · 0 评论 -
【Codeforces 547 E】Mike and Friends(Ac自动机 / 树状数组)
传送门不知道为什么会是div1Ediv1Ediv1E显然建出acacac自动机显然一个操作对应的就是l,rl,rl,r对应的所有串在trietrietrie上所有点加111然后询问failfailfail树上xxx对应位置的子树的和离线下来用树状数组维护即可#include<bits/stdc++.h>using namespace std;#define cs con...原创 2020-03-17 19:58:07 · 178 阅读 · 0 评论 -
【BZOJ3881】【Coci2015】—Divljak(Ac自动机+树状数组)
传送门相当于吗每次把TTT在AcAcAc自动机上跑把经过的所有点在failfailfail树上的祖先不重复的加一单点询问权值在AcAcAc自动机上走,把所有经过的点按照dfndfndfn排序把相邻两点的LcaLcaLca到根减一即可由于链加是O(log2n)O(log^2n)O(log2n)的转成单点加,子树求和可以做到O(nlogn)O(nlogn)O(nlogn)因为我AcAc...原创 2019-09-25 22:04:45 · 111 阅读 · 0 评论 -
【HDU 5566】—Clarke and room(Ac自动机+树链剖分)
传送门感觉像以前做过的一道题的简化版而且可以离线做这样时空复杂度都会小很多#include<bits/stdc++.h>using namespace std;const int RLEN=1<<20|1;inline char gc(){ static char ibuf[RLEN],*ib,*ob; (ob==ib)&&(o...原创 2019-09-25 17:47:22 · 212 阅读 · 0 评论 -
【BZOJ #4231】—回忆树(Kmp+Ac自动机)
传送门考虑把经过LcaLcaLca提出来暴力KmpKmpKmp统计总长度只有O(∣S∣)O(|S|)O(∣S∣)的现在只用考虑一段链差分后就是到根的一条链考虑从根dfsdfsdfs,dfsdfsdfs的同时在AcAcAc自动机上走,把每个点点权加一对于每个询问就是failfailfail树子树和走出去的的时候减一对正反串分别建一个AcAcAc自动机就可以了#include<...原创 2019-09-25 17:15:59 · 301 阅读 · 0 评论 -
【洛谷P2444】【POI2000】—病毒(Ac自动机)
传送门很显然就是从AcAcAc自动机根开始走不经过任何一个终点有一个环记得建failfailfail的时候下传终点标记#include<bits/stdc++.h>using namespace std;const int RLEN=1<<20|1;inline char gc(){ static char ibuf[RLEN],*ib,*ob; ...原创 2019-09-25 17:04:49 · 94 阅读 · 0 评论 -
【BJOI2019 Day1】简要题解
T1:传送门很显然是要在AcAcAc自动机上dpdpdp一个显然的dpdpdp是f[i][j][k]f[i][j][k]f[i][j][k]表示前iii个字符,当前在自动机的点jjj,已经有kkk个咒语的最大价值但是由于咒语最多有O(n2)O(n^2)O(n2)个复杂度太差了由于max∏vc\max \sqrt[c]{\prod v}maxc∏v不好处理考虑转成对数就变成max...原创 2019-09-05 14:22:08 · 152 阅读 · 0 评论 -
【NOIp训练】—子串查找VII(AC自动机+树链剖分+线段树)
传送门题意:给定nnn个点的树,树上每个节点存有一个字符串sss和权值vvv有mmm次询问每次给定一个字符串SSS和树上一条路径询问每个节点的s在S中出现次数×vs在S中出现次数\times vs在S中出现次数×v之和支持修改点的权值n,m≤2e5,∑∣S∣,∣s∣≤4e5n,m\le2e5,\sum|S|,|s|\le 4e5n,m≤2e5,∑∣S∣,∣s∣≤4e5结果数据水的...原创 2019-08-24 14:55:03 · 194 阅读 · 3 评论 -
【BZOJ4861】【BJOI2017】—魔法咒语(AC自动机+矩阵快速幂优化dp)
传送门当l≤100l\le 100l≤100时显然的自动机上dpdpdp就完了当l≤1e8l\le1e8l≤1e8时直接dpdpdp显然是不行的但是发现基本串长度不大于二考虑矩乘优化a[i][j]a[i][j]a[i][j]表示有几个基本串使得在自动机上iii走到jjj如果所有串长相同就可以直接快速幂了但是串长有111有222不同长度不好处理拼起来的情况设A1A_1A1表示长...原创 2019-07-19 17:45:42 · 204 阅读 · 0 评论 -
【BZOJ3530】【SDOI2014】—数数(Ac自动机+数位dp)
传送门f[0/1][j][k]f[0/1][j][k]f[0/1][j][k]表示有无限制,匹配到jjj位,在自动机上的点kkk的方案数瞎dpdpdp就完了注意前导0的情况,比如限制012301230123,但123123123是合法的#include<bits/stdc++.h>using namespace std;#define gc getcharinline ...原创 2019-07-19 12:01:02 · 117 阅读 · 0 评论 -
【USACO12JAN】—视频游戏的连击Video Game Combos(AC自动机+dp)
描述贝西在玩一款游戏,该游戏只有三个技能键 “A”“B”“C”可用,但这些键可用形成N种(1 <= N<= 20)特定的组合技。第i个组合技用一个长度为1到15的字符串S_i表示。当贝西输入的一个字符序列和一个组合技匹配的时候,他将获得1分。特殊的,他输入的一个字符序列有可能同时和若干个组合技匹配,比如N=3时,3种组合技分别为"ABA", “CB”, 和"ABACB",若贝西输入...原创 2019-07-19 11:57:57 · 176 阅读 · 0 评论 -
【BZOJ2434】【NOI2011】—阿狸的打字机(AC自动机+线段树)
传送门考虑一个串AAA在另一个串BBB中出现的次数其实就是BBB串的链上有多少个点的failfailfail直接或间接指向AAA的末指针所以建出failfailfail树后就是AAA的末指针的子树和每次暴力把BBB的所有点设成1查询可以有707070分离线后对于每个BBB记一下要询问哪些就行了复杂度O(nlogn)O(nlogn)O(nlogn)#include<bits/s...原创 2019-06-09 16:08:33 · 100 阅读 · 0 评论