传送门: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. bluehost 邮箱设置问题

    问题描述: e-elitech.com域名,elitechus.com域名均在阿里云注册,en.e-elitech.com解析到bluehost虚拟主机,www.elitechus.com也解析到bl ...

  2. eclipse快捷键(转载)

    Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当 ...

  3. 深入理解React、Redux

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

  4. sql server 更新两个表的某个字段

    --临时表 create table tmp_cup ( a varchar(20), b varchar(50), c varchar(20) ) select * from t_customer ...

  5. thinkphp5.0入口文件

    入口文件 ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个应用都有一个统一(但不一定是唯一)的入口. 应该说,所有应用都是从入口文件开始的,并且不同应用的入口文件是类似的. ...

  6. MySQL:MySQL的基本操作

    1.数据库登录 格式:mysql -h主机地址 -u用户名 -p用户密码 -P端口 -D数据库 -e “SQL内容” [root@wulaoer ~]# mysql -uroot -p  2.修改密码 ...

  7. GetEnvironmentVariable 获取常用系统变量(转)

    源:GetEnvironmentVariable 获取常用系统变量 //譬如 WINDIR 表示系统目录系统变量, 以这样获: var s:string; begin s:=GetEnvironmen ...

  8. after和before的属性妙用

    ::after或::before设置它们的样式时有一个content这个属性这里可以写attr(data-label)其中data-label是标签上设置的data属性里的数据content:attr ...

  9. 卷积神经网络(CNN)新手指南 1

    http://blog.csdn.net/real_myth/article/details/52273930 卷积神经网络(CNN)新手指南 2016-07-29 18:22 Blake 1条评论 ...

  10. angularJS 系列(三)- 自定义 Service

    参考:http://viralpatel.net/blogs/angularjs-service-factory-tutorial/ https://www.pluralsight.com/blog/ ...