[字典树上建回文自动机] ICPC Preparatory Series by Team Akatsuki. Three Palindromes
2017-10-14 07:42
429 查看
传送门
dfs整棵树,记录根到当前结点的字符串,然后从父节点在回文自动机上对应的节点开始转移就行了
用基础的插入方法会被卡成 O(n2)
dfs整棵树,记录根到当前结点的字符串,然后从父节点在回文自动机上对应的节点开始转移就行了
用基础的插入方法会被卡成 O(n2)
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N=100010; int n,cnt,tot,fail[N],len[N],p[N],G[N],nxt[N][30],trans[N][30]; int a ,s ; struct edge{ int t,nx; }E[N<<1]; inline void addedge(int x,int y){ E[++cnt].t=y; E[cnt].nx=G[x]; G[x]=cnt; E[++cnt].t=x; E[cnt].nx=G[y]; G[y]=cnt; } inline int extend(int x,int p){ if(x!=s[tot-len[p]-1]) p=trans[p][x]; if(!nxt[p][x]){ int cur=++cnt,k=fail[p]; len[cur]=len[p]+2; if(x!=s[tot-len[k]-1]) k=trans[k][x]; fail[cur]=nxt[k][x]; memcpy(trans[cur],trans[fail[cur]],sizeof(trans[cur])); trans[cur][s[tot-len[fail[cur]]]]=fail[cur]; nxt[p][x]=cur; } return nxt[p][x]; } long long ans=0; int ians[N]; void dfs(int x,int f){ s[++tot]=a[x]; p[x]=extend(a[x],p[f]); ians[x]=max(len[p[x]],ians[f]); ans+=ians[x]; //printf("%d %d\n",x,len[p[x]]); for(int i=G[x];i;i=E[i].nx) if(E[i].t!=f) dfs(E[i].t,x); tot--; } int main(){ freopen("1.in","r",stdin); freopen("1.out","w",stdout); scanf("%d",&n); s[0]=-1; for(int i=1;i<=n;i++) while((a[i]=getchar()-'a')<0 || a[i]>25); for(int i=1,x,y;i<n;i++) scanf("%d%d",&x,&y),addedge(x,y); cnt=1; fail[0]=fail[1]=1; len[1]=-1; for(int i=0;i<26;i++) trans[0][i]=1; dfs(1,0); cout<<ans<<endl; return 0; }
相关文章推荐
- 回文树(回文自动机) - URAL 1960 Palindromes and Super Abilities
- UVA 11584 Paritioning by Palindromes(动态规划 回文)
- 回文树(回文自动机) - URAL 1960 Palindromes and Super Abilities
- Ural 2040 Palindromes and Super Abilities 2 回文自动机
- URAL 2040 Palindromes and Super Abilities 2 (回文自动机)
- HDU Three Palindromes(三部分独立回文)
- 回文自动机 + DFS --- The 2014 ACM-ICPC Asia Xi’an Regional Contest Problem G.The Problem to Slow Down You
- BZOJ2342:双倍回文(回文自动机+树上差分)
- 【后缀回文自动机】 URAL 1960 Palindromes and Super Abilities
- (UVA - 11584) Partitioning by Palindromes(DP,划分的最小回文串个数)
- UVA 11584 Partitioning by Palindromes(切割最小回文)
- URAL 2059 Not common palindromes 回文自动机
- 回文自动机 + DFS --- The 2014 ACM-ICPC Asia Xi’an Regional Contest Problem G.The Problem to Slow Down You
- ACM-ICPC (10/16) Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)
- UVa11584-Partitioning by Palindromes
- UVA11584---Partitioning by Palindromes(dp)
- USACO Section 1.5 Prime Palindromes(回文数+素数)
- 2009 Competition Highlights by ICPC Live
- UVA-11584-Partitioning by Palindromes(区间DP 最小回文串数量)
- 回文自动机