BZOJ 3238 AHOI2013 差异 后缀自动机

您所在的位置:网站首页 affix是前缀还是后缀 BZOJ 3238 AHOI2013 差异 后缀自动机

BZOJ 3238 AHOI2013 差异 后缀自动机

2023-04-20 11:00| 来源: 网络整理| 查看: 265

BZOJ 3238 AHOI2013 差异 后缀自动机 原创

popoqqq 2023-04-19 00:54:00 博主文章分类:BZOJ ©著作权

文章标签 BZOJ BZOJ3238 后缀自动机 #include 后缀树 文章分类 HarmonyOS 后端开发

©著作权归作者所有:来自51CTO博客作者popoqqq的原创作品,请联系作者获取转载授权,否则将追究法律责任

题目大意:给定一个字符串,求Σ[1parent) p->son[x]=np; if(!p) np->parent=root; else { SAM *q=p->son[x]; if(p->max_dpt+1==q->max_dpt) np->parent=q; else { SAM *nq=new SAM(p->max_dpt+1); nq->son=q->son; nq->parent=q->parent; q->parent=nq;np->parent=nq; for(;p&&p->son[x]==q;p=p->parent) p->son[x]=nq; } } last=np; np->right++; } } int n; long long ans; char s[M]; void DFS(Suffix_Automaton::SAM *p) { using namespace Suffix_Automaton; map::iterator it; if(p->parent) p->parent->tree_son.push_back(p); p->mark=1; for(it=p->son.begin();it!=p->son.end();it++) if( !(it->second)->mark ) DFS(it->second); } void Tree_DP(Suffix_Automaton::SAM *p) { using namespace Suffix_Automaton; vector::iterator it; for(it=p->tree_son.begin();it!=p->tree_son.end();it++) { Tree_DP(*it); ans-=(long long)p->max_dpt*p->right*(*it)->rightright; } } int main() { using namespace Suffix_Automaton; int i; scanf("%s",s+1);n=strlen(s+1); for(i=n;i;i--) Extend(s[i]-'a'); ans=(long long)(n-1)*n*(n+1)/2; DFS(root);Tree_DP(root); cout 收藏 评论 分享 举报

上一篇:BZOJ 2286 SDOI2011 消耗战 倍增LCA+单调栈

下一篇:BZOJ 2400 Optimal Marks 最小割



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3