传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3756

题解:乱搞

代码:

 #include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#define ll long long
#define maxn 1600005
using namespace std;
int val[maxn],fa[maxn],son[maxn][],ri[maxn],tmp[maxn],fin[maxn];
int d[maxn],tail=,head=,qq[maxn]; ll sum[maxn],ans;
char s[maxn*];
int n,m,tot,root,last;
int newnode(int x){val[++tot]=x; return tot;}
void extend(int x)
{
int p=last,np=newnode(val[p]+); ri[np]=;
for (; p && !son[p][x]; p=fa[p]) son[p][x]=np;
if (!p) fa[np]=root;
else
{
int q=son[p][x];
if (val[p]+==val[q]) fa[np]=q;
else
{
int nq=newnode(val[p]+);
memcpy(son[nq],son[q],sizeof(son[q]));
fa[nq]=fa[q]; fa[q]=fa[np]=nq;
for (; p&& son[p][x]==q; p=fa[p]) son[p][x]=nq;
}
}
last=np;
}
void Tsort()
{
memset(d,,sizeof(d));
for(int i=;i<=tot;i++) d[fa[i]]++;
for(int i=;i<=tot;i++) if(d[i]==) qq[++tail]=i;
while(head<tail){
int x=qq[++head];
ri[fa[x]]+=ri[x];
if((--d[fa[x]])==) qq[++tail]=fa[x];
}
memset(sum,,sizeof(sum));
for (int i=; i<=tot; i++) sum[val[i]]++;
for (int i=; i<=tot; i++) sum[i]+=sum[i-];
for (int i=tot; i>=; i--) tmp[sum[val[i]]--]=i;
memset(sum,,sizeof(sum));
ri[root]=val[root]=val[]=;
for (int i=; i<=tot; i++)
{
int x=tmp[i];
sum[x]=1ll*ri[x]*(val[x]-val[fa[x]]);
if (fa[x]) sum[x]+=sum[fa[x]];
}
sum[root]=;
}
void work()
{
int len=;
scanf("%s",s+); m=strlen(s+); last=root;
for (int i=; i<=m; i++)
{
int x=s[i]-'a';
if (son[last][x]) last=son[last][x],len++;
else
{
for (; last && !son[last][x]; last=fa[last]) ;
if (last) len=val[last]+,last=son[last][x];
else len=,last=root;
}
if (last!=root&&last){
ans+=(sum[fa[last]]+1ll*(len-val[fa[last]])*ri[last]);
}
}
printf("%lld\n",ans);
}
int main()
{
scanf("%d\n",&n); char ch[];
tot=root=last=fin[]=;
for (int i=; i<=n; i++)
{
int k;
scanf("%d%s",&k,ch+); last=fin[k]; extend(ch[]-'a'); fin[i]=last;
}
Tsort();
work();
}

Fuck ls 看了ls错误建图,懒得改了。。。。

开始时间:+

结束时间:-

Bzoj3756的更多相关文章

  1. bzoj3756: Pty的字符串

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  2. 【BZOJ3756】Pty的字符串(广义后缀自动机)

    题意: 思路:论文题 建立Trie树的后缀自动机需要换这个长的板子 #include<bits/stdc++.h> using namespace std; typedef long lo ...

随机推荐

  1. 在Visual C++中的用ADO进行数据库编程

    1. 生成应用程序框架并初始化OLE/COM库环境 创建一个标准的MFC AppWizard(exe)应用程序,然后在使用ADO数据库的InitInstance函数中初始化OLE/COM库(因为ADO ...

  2. dage手法之 头部和banner ad tpl_header

    <div class="top2"> <?php if ($current_page_base == 'index' || $current_page_base ...

  3. HDU 3487 Play with Chain | Splay

    Play with Chain Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. AJAX(XMLHttpRequest)进行跨域请求方法详解(三)

    注意:以下代码请在Firefox 3.5.Chrome 3.0.Safari 4之后的版本中进行测试.IE8的实现方法与其他浏览不同. 3,带验证信息的请求 身份验证是Web开发中经常遇到的问题,在跨 ...

  5. 深入理解React、Redux

    深入理解React.ReduReact+Redux非常精炼,良好运用将发挥出极强劲的生产力.但最大的挑战来自于函数式编程(FP)范式.在工程化过程中,架构(顶层)设计将是一个巨大的挑战.要不然做出来的 ...

  6. windows加固方案

    1     账号管理.认证授权.... 1 1.1      账号... 1 1.2      口令... 1 1.3      授权... 2 2     日志配置操作.... 3 3     IP ...

  7. string转化为int方法

    int intA = 0; 1.intA =int.Parse(str); 2.int.TryParse(str, out intA); 3.intA = Convert.ToInt32(str);以 ...

  8. struts2 里escape="false"的问题?

    <s:property value="html" escape="false"/> 没有name 不知道你是怎么取的值 <s:hidden n ...

  9. javascript event bubbling and capturing (再谈一谈js的事件冒泡和事件补获,看到这篇文章加深了理解)

    原文地址:http://javascript.info/tutorial/bubbling-and-capturing 先给出最终的结论: Summary Events first are captu ...

  10. linux下的安装百度云网盘

    linux下的百度网盘 (2014-10-20 18:01:14) 标签: linux 百度网盘 网盘 百度 forlinux 分类: 技术博文 百度网盘说实话,其实我挺喜欢的,好处什么的,就不说了, ...