P6257-[ICPC2019 WF]First of Her Name【AC自动机】

正题

题目链接:https://www.luogu.com.cn/problem/P6257


题目大意

给出一个字典树,kkk次询问求每个节点出发到根节点的路径有多少包含前缀sis_isi


解题思路

我们按照所有询问串的反串构造ACACAC自动机。

那么此时如果我们用一个串SSS上去跑匹配的话,那么跑到的节点就表示该串在所有ACACAC自动机上的串拥有的最长后缀。然后其他存在的后缀一定在这个点到根的failfailfail链上。

然后我们丢一个TrieTrieTrie树上去匹配,跑到的点cnt++cnt++cnt++,之后在failfailfail树上统计子树的cntcntcnt和即可。

时间复杂度O(n∑∣s∣)O(n\sum |s|)O(ns)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1e6+1;
int n,k,tot,ch[N][26],t[N][26],cnt[N],in[N],pos[N],fail[N];
char s[N];
queue<int> q;
int Insert(char *s){int l=strlen(s+1),x=0;for(int i=l;i>=1;i--){int c=s[i]-'A';if(!t[x][c])t[x][c]=++tot;x=t[x][c];}return x;
}
void Get_Fail(){for(int i=0;i<26;i++)if(t[0][i])q.push(t[0][i]);while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<26;i++){if(!t[x][i])t[x][i]=t[fail[x]][i];else{fail[t[x][i]]=t[fail[x]][i];q.push(t[x][i]);}}}return;
}
void Dfs(int x,int y){cnt[y]++;for(int i=0;i<26;i++)if(ch[x][i])Dfs(ch[x][i],t[y][i]);return;
}
void Calc(){for(int i=1;i<=tot;i++)in[fail[i]]++;for(int i=0;i<=tot;i++)if(!in[i])q.push(i);while(!q.empty()){int x=q.front();q.pop();cnt[fail[x]]+=cnt[x];in[fail[x]]--;if(!in[fail[x]])q.push(fail[x]);}return;
}
int main()
{scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){int x;char op[3];scanf("%s%d",op,&x);ch[x][op[0]-'A']=i;}for(int i=1;i<=k;i++){scanf("%s",s+1);pos[i]=Insert(s);}Get_Fail();Dfs(0,0);Calc();for(int i=1;i<=k;i++)printf("%d\n",cnt[pos[i]]);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软MVP张善友告诉你,微服务选型要注意这些地方

周六的下午&#xff0c;广州周大福金融中心的写字楼静悄悄的&#xff0c;53楼的实盈多功能会议室却异常火爆&#xff0c;热闹非凡。来自广州各大科技公司的技术小伙伴们齐聚一堂&#xff0c;他们都在期待着一个人&#xff0c;那就是——微软MVP张善友和他带来的 .NET Core 微服…

像鱼

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 给你一个边长为 n 的用硬币摆成的实心三角形&#xff0c;请问把他倒过来最少需要多少步&#xff1f; 例子…

[ZJOI2005]午餐(贪心+dp)

首先若只有一个窗口&#xff0c;利用贪心&#xff0c;按吃饭时间从大到小排序即可 正确性证明&#xff1a; 定义 eat[i] 第i个人的吃饭时间&#xff0c;time[i] 第i个人的打饭时间 延长时间T[i]max(eat[i]- ∑ji1ntimej\sum\limits_{ji1}^ntime_jji1∑n​timej​ ,0) 最后…

【图论】【模板】静态仙人掌(luogu 5236)

【模板】静态仙人掌 题目大意 给你一个无向仙人掌图&#xff08;保证每条边至多出现在一个简单回路中的无向图&#xff09;&#xff0c;问你两个点之间的最短路距离 输入样例#1 9 10 2 1 2 1 1 4 1 3 4 1 2 3 1 3 7 1 7 8 2 7 9 2 1 5 3 1 6 4 5 6 1 1 9 5 7输出样例#1 5 …

Wannafly挑战赛24D-无限手套【dp,生成函数】

正题 题目链接:https://ac.nowcoder.com/acm/contest/186/D 题目大意 mmm个二元组(ai,bi)(a_i,b_i)(ai​,bi​)&#xff0c;对于一个序列xxx的贡献是∏i1n(aixi2bixi1)\prod_{i1}^n(a_ix_i^2b_ix_i1)i1∏n​(ai​xi2​bi​xi​1) qqq次询问给出nnn求在xi≥0x_i\geq 0xi​≥0且…

SCF: 简单配置门面

Simple Configuration Facade, 简写为 SCF。是 代码 和 外部配置 (properties文件, 环境变量&#xff0c;系统/命令行参数, yaml文件, 等等)之间的一层抽象. 命名上和另一个著名组件slf4j (Simple Logging Facade for Java)相似, 在配置领域的地位也和slf4j &#xff08;.NET可…

字符串(AC自动机(fail tree))

传送门 注意&#xff1a;注释中的那段代码是不能用的 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<queue> using namespace std; typedef long long ll; const int N2000010; struct Edge{int v,nxt;}ed…

武汉工程大学2020GPLT选拔赛(上)

比赛链接 A L1-1 I LOVE WIT 模拟&#xff0c;每个字母单独一行&#xff0c;前面的空格按规律输出。可以直接输出&#xff0c;也可以模拟过程 #include<bits/stdc.h> using namespace std; int main(){string s"I LOVE WIT";for(int i0;i<s.size();i){fo…

【矩阵乘法】【倍增】美食家(luogu 6772)

美食家 题目大意 给你一个有向图&#xff0c;边权为经过所需时间 每个点有一个点权&#xff0c;有些点还有有特殊的点权 当你到达一个点后&#xff0c;可以获得该点的点权&#xff08;重复经过可以重复获得&#xff0c;但不能停留&#xff09;&#xff0c;若在某个时间到某个…

.net core实践系列之短信服务-为什么选择.net core(开篇)

前言从今天我将会写.net core实战系列&#xff0c;以我最近完成的短信服务作为例子。该系列将会尽量以最短的时间全部发布出来。源码也将优先开源出来给大家。源码地址&#xff1a;https://github.com/SkyChenSky/Sikiro.SMS.NET CORE简介ASP.NET Core 是一个跨平台的高性能开源…

P3172-[CQOI2015]选数【dp,容斥】

正题 题目链接:https://www.luogu.com.cn/problem/P3172 题目大意 求有多少个长度为NNN的值域在[L,R][L,R][L,R]这个区间的序列满足它们的gcdgcdgcd恰好是KKK。 解题思路 dpdpdp容斥思想 我们先让L⌊LK−1K⌋,R⌊RK⌋L\lfloor\frac{LK-1}{K}\rfloor,R\lfloor\frac{R}{K}\rfl…

博弈论总结

前言 本篇为博弈论总结&#xff0c;文章会按题目类型分类。 基础铺垫——必胜点和必败点的介绍 P点&#xff1a;必败点&#xff0c;换而言之&#xff0c;就是谁处于此位置&#xff0c;则在双方操作正确的情况下必败。 N点&#xff1a;必胜点&#xff0c;处于此情况下&#x…

牛客网【每日一题】5月8日题目精讲 codeJan与旅行

比赛链接&#xff1a; 文章目录题目描述题解&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 codeJan 非常喜欢旅行。现在有 n 个城市排在一条线上&#xff0c;并…

.netcore consul实现服务注册与发现-集群完整版

一、Consul的集群介绍Consul Agent有两种运行模式&#xff1a;Server和Client。这里的Server和Client只是Consul集群层面的区分&#xff0c;与搭建在Cluster之上的应用服务无关&#xff0c; 以Server模式运行的Consul Agent节点用于维护Consul集群的状态&#xff0c;官方建议每…

【矩阵乘法】【倍增】WYC(luogu 3597)

WYC 题目大意 给你一个有向图&#xff0c;让你求图中的kkk短路&#xff08;非简单路径&#xff09; 输入样例# 6 6 11 1 2 1 2 3 2 3 4 2 4 5 1 5 3 1 4 6 3输出样例#1 4数据范围 1⩽n⩽40&#xff0c;1⩽m⩽1000&#xff0c;1⩽k⩽10181\leqslant n\leqslant 40&#xff…

匹配(树形DP)

传送门 题目描述&#xff1a; 有一张无向联通图 G⟨V,E⟩ &#xff0c;其中顶点数 |V|n &#xff0c;边数 |E|n−1 。求有多少种方案使得删边后残余图中的最大匹配数恰好为 m 的倍数。 题解&#xff1a; 这道题看起来是求最大匹配&#xff0c;其实关系不大&#xff0c;正解…

博弈论讲解(一)

常见的博弈论有巴什博弈&#xff0c;威佐夫博弈&#xff0c;尼姆博弈&#xff0c;斐波那契博弈等等&#xff0c;今天暂时讲几个 文章目录一.巴什博弈证明&#xff1a;代码二.威佐夫博奕结论&#xff1a;代码&#xff1a;三.环形博弈结论证明代码&#xff1a;一.巴什博弈 巴什博…

浅谈surging服务引擎中的rabbitmq组件和容器化部署

1、前言上个星期完成了surging 的0.9.0.1 更新工作&#xff0c;此版本通过nuget下载引擎组件&#xff0c;下载后&#xff0c;无需通过代码build集成&#xff0c;引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎&#xff0c;而这篇将介绍浅谈surging服务引擎中的rabbi…

csp-j/s总结

文章目录csp-jcsp-s总结csp-j T1傻逼题(我是傻逼&#xff09;&#xff0c;手残把&打成整除了&#xff08;大样例还对了gg&#xff09; T2乱推&#xff0c;然后打了个O(n)O(n)O(n)&#xff0c;却WA了15分&#xff1f; T3看了看&#xff0c;修改不会相互影响&#xff1f;那不…

51nod1220-约数之和【莫比乌斯反演,杜教筛】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId1220 题目大意 给出nnn&#xff0c;求∑i1n∑j1nσ(i∗j)\sum_{i1}^n\sum_{j1}^n\sigma(i*j)i1∑n​j1∑n​σ(i∗j) 其中σ\sigmaσ表示约数和。 解题思路 首先有结论σ(i∗j)∑x∣i∑y∣j[gcd(x,y)1]…