当前位置: 首页 > news >正文

永久免费自动建站系统/今日国际新闻最新消息大事

永久免费自动建站系统,今日国际新闻最新消息大事,企业网站建设变相收取等级保护费,哪些网站做外链题目传送门 题目大意: 给出 nnn 个模板串以及 mmm 个询问,每次询问一个串是多少个模板串的子串。 题解 显然直接建一个广义SAM,然后标记一下包含某个模板串前缀的状态属于哪个模板串,记为 belong[i]belong[i]belong[i]&#xf…

题目传送门

题目大意: 给出 nnn 个模板串以及 mmm 个询问,每次询问一个串是多少个模板串的子串。

题解

显然直接建一个广义SAM,然后标记一下包含某个模板串前缀的状态属于哪个模板串,记为 belong[i]belong[i]belong[i],那么问题变成了,询问时在广义SAM中找到这个串对应的状态,然后这个状态在后缀链接树中的子树中包含多少个不同的 belong[i]belong[i]belong[i]

那么后面这个问题套一下dsu on tree的板子,预处理出每个节点的答案,询问的时候直接拿就好。

代码如下:

#include <cstdio>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
#define maxn 2000010int n,m;
char s[maxn];
struct state{int len,link;map<char,int>next;
}st[maxn];
int id=0,last,now,p,q;
int belong[maxn];
void extend(char x,int be)
{now=++id;st[now].len=st[last].len+1;belong[now]=be;for(p=last;p!=-1&&!st[p].next.count(x);p=st[p].link)st[p].next[x]=now;if(p!=-1){q=st[p].next[x];if(st[p].len+1==st[q].len)st[now].link=q;else{int clone=++id;st[clone]=st[q];st[clone].len=st[p].len+1;for(;p!=-1&&st[p].next[x]==q;p=st[p].link)st[p].next[x]=clone;st[q].link=st[now].link=clone;}}last=now;
}
struct edge{int y,next;};
edge e[maxn];
int first[maxn],len=0;
void buildroad(int x,int y){e[++len]=(edge){y,first[x]};first[x]=len;}
int size[maxn],mson[maxn];
void dfs1(int x)
{size[x]=1;for(int i=first[x];i;i=e[i].next){int y=e[i].y;dfs1(y);size[x]+=size[y];if(!mson[x]||size[y]>size[mson[x]])mson[x]=y;}
}
int ans[maxn],color[maxn],tot=0;
void add(int x){tot+=(!color[x]);color[x]++;}
void del(int x){color[x]--;tot-=(!color[x]);}
void go(int x,void (*func)(int x))
{if(belong[x])func(belong[x]);for(int i=first[x];i;i=e[i].next)go(e[i].y,func);
}
void dfs2(int x,bool v)
{for(int i=first[x];i;i=e[i].next)if(e[i].y!=mson[x])dfs2(e[i].y,false);if(mson[x])dfs2(mson[x],true);if(belong[x])add(belong[x]);for(int i=first[x];i;i=e[i].next)if(e[i].y!=mson[x])go(e[i].y,add);ans[x]=tot;if(!v)go(x,del);
}int main()
{scanf("%d %d",&n,&m);st[0].link=-1;for(int i=1,x;i<=n;i++){scanf("%s",s+1);x=strlen(s+1);last=0;for(int j=1;j<=x;j++)extend(s[j],i);}for(int i=1;i<=id;i++)buildroad(st[i].link,i);dfs1(0);dfs2(0,true);ans[0]=0;for(int i=1,x;i<=m;i++){scanf("%s",s+1);x=strlen(s+1);now=0;last=0;for(int j=1;j<=x;j++)if(st[now].next.count(s[j]))now=st[now].next[s[j]];else {last=1;break;}if(last)printf("0\n");else printf("%d\n",ans[now]);}
}
http://www.lbrq.cn/news/1620505.html

相关文章:

  • 网站可以做被告嘛/国内比较好的软文网站
  • 哪个网站可以做创意短视频网站/加入网络营销公司
  • 银川网站建设哪家优/sem培训班学费哪个好
  • 湛江制作网站多少钱/热狗seo优化外包
  • 做网站 什么语言/想要推广网页正式版
  • 拍卖网站建设/合肥网站推广
  • 温州网站建设和推广/安卓优化大师最新版
  • 做网站用什么/网站搜索
  • 学生做网站的目的/怎样做网站
  • 音乐网站设计总结/参考消息今天新闻
  • 手机端企业网站怎么做/网络推广怎么做方案
  • w网站怎么做/海南seo顾问服务
  • wordpress如何修改页脚/合肥网站推广优化公司
  • 提供免费网站建设/互联网培训机构排名前十
  • 建一个公司需要多少钱/怎么优化整站
  • 网站频道建设/seo网站排名全选
  • 大良营销网站建设流程/深圳网站营销seo电话
  • 外贸网站外链/盘古百晋广告营销是干嘛
  • 公司网站设计素材/电商网站前端页面内容编写
  • 怎么查看自己网站有没有做301/seo优化在线
  • wordpress挖/网站内链优化
  • 网站建设常见问题及解决办法/百度推广开户费用标准
  • 承德网站制作多少钱/深圳网络推广公司
  • uc网站怎么做/搜索引擎营销的英文缩写
  • 做水果网站需要多钱/seo的研究对象
  • 工业云网站建设/企业营销案例
  • 水利部建设安全管理中心网站/app推广注册放单平台
  • 模版网站怎么做/哈尔滨seo服务
  • 让人做网站需要注意什么/游戏代理
  • 顺德网站制作案例教程/自己建网站详细流程
  • Linux虚拟内存
  • 关于MyBatis 的懒加载(Lazy Loading)机制
  • forge篇——配置
  • 【嵌入式电机控制#18】有刷直流串级控制
  • 落霞归雁思维框架应用(十) ——在职考研 199 管综 + 英语二 30 周「顺水行舟」上岸指南
  • Uniswap V2 成功上线 PolkaVM:Polkadot Hub 的里程碑时刻