[BZOJ3926][ZJOI2015]诸神眷顾的幻想乡(广义后缀自动机)
2018-02-25 21:29
573 查看
题目:
我是超链接题解:
广义的后缀自动机就是对多串建立的后缀自动机。对于这道题目来说,要求不同的子串个数,这个不就是裸的step[i]-step[fa[i]]吗,但是由于还有”顺序“问题(红黄蓝和蓝黄红),那么我们就需要对于不同的顺序建立后缀自动机,我们发现题目说叶节点不超过20个,那么我们可以从叶节点开始每次遍历树建立后缀自动机,这样得到了所有的链(即获得了所有可能的顺序),然后在后缀自动机上奔跑就可以了
trie 树的后缀自动机的状态数是线性的,不超过2|T|,|T|应该是trie的节点数。
trie树的后缀自动机的转移函数(边数)的上界为trie的节点数*字符集大小。
注意这东西既然是一棵trie树而不是很多不一样的字符串,我们就不能把last每次清1带进去玩了,而是按照树的结构一样添加东西
代码:
#include <cstdio> #include <cstring> #define LL long long using namespace std; const int N=2000005; int np,p,nq,q,cnt,ch[N*2][15],fa ,tot,nxt ,point ,v ,c ,step ,du ; LL ans; void addline(int x,int y) { ++tot; nxt[tot]=point[x]; point[x]=tot; v[tot]=y; ++tot; nxt[tot]=point[y]; point[y]=tot; v[tot]=x; } int insert(int p,int c) { np=++cnt; step[np]=step[p]+1; while (p && !ch[p][c]) ch[p][c]=np,p=fa[p]; if (!p) {fa[np]=1;return np;} q=ch[p][c]; if (step[q]==step[p]+1){fa[np]=q;return np;} nq=++cnt; step[nq]=step[p]+1; memcpy(ch[nq],ch[q],sizeof(ch[q])); fa[nq]=fa[q]; fa[q]=fa[np]=nq; while (ch[p][c]==q) ch[p][c]=nq,p=fa[p]; return np; } void dfs(int x,int fa,int p) { int t=insert(p,c[x]); for (int i=point[x];i;i=nxt[i]) if (v[i]!=fa) dfs(v[i],x,t); } int main() { cnt=1;int n,cc; scanf("%d%d",&n,&cc); for (int i=1;i<=n;i++) scanf("%d",&c[i]); for (int i=1;i<n;i++) { int x,y;scanf("%d%d",&x,&y); addline(x,y); du[x]++; du[y]++; } for (int i=1;i<=n;i++) if (du[i]==1) dfs(i,0,1); for (int i=1;i<=cnt;i++) ans+=(LL)(step[i]-step[fa[i]]); printf("%lld",ans); }
相关文章推荐
- bzoj 3926: [Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机)
- BZOJ 3926 && ZJOI 2015 诸神眷顾的幻想乡 (广义后缀自动机)
- BZOJ.3926.[ZJOI2015]诸神眷顾的幻想乡(广义后缀自动机)
- 【BZOJ3926】[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机
- [BZOJ3926][Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机)
- 【BZOJ3926】【Zjoi2015】诸神眷顾的幻想乡 广义后缀自动机
- 字符串(广义后缀自动机):BZOJ 3926 [Zjoi2015]诸神眷顾的幻想乡
- bzoj3926 [Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机)
- BZOJ 3926 [Zjoi2015]诸神眷顾的幻想乡 ——广义后缀自动机
- [广义后缀自动机 Trie树] BZOJ 3926 [Zjoi2015]诸神眷顾的幻想乡
- bzoj3926[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机
- BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡 [广义后缀自动机 Trie]
- 【BZOJ3926】诸神眷顾的幻想乡(ZJOI2015)-广义后缀自动机
- 【bzoj3926】[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机
- [BZOJ]3926 [ZJOI2015] 诸神眷顾的幻想乡 广义后缀自动机
- 【bzoj3926】[Zjoi2015]诸神眷顾的幻想乡 后缀自动机
- [BZOJ3926][ZJOI2015]诸神眷顾的幻想乡(后缀自动机)
- 【BZOJ3926】【Zjoi2015】诸神眷顾的幻想乡 后缀自动机
- [BZOJ3926][Zjoi2015]诸神眷顾的幻想乡-后缀自动机
- [BZOJ3926] [ZJOI2015]诸神眷顾的幻想乡|后缀自动机