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

兰州新区建站房天下fangcom

兰州新区建站,房天下fangcom,php网站开发教材,做社交的招聘网站失配树,是一种奇妙的数据结构,它利用 KMP、LCA 解决求两前缀的最长公共 Border 的问题。 首先介绍一下什么是 Border,我们知道 nxt 数组是前后缀相同的最大长度,Border 相当于是 nxt 数组的弱化版,只是去掉了“最大”…

失配树,是一种奇妙的数据结构,它利用 KMP、LCA 解决求两前缀的最长公共 Border 的问题。

首先介绍一下什么是 Border,我们知道 nxt 数组是前后缀相同的最大长度,Border 相当于是 nxt 数组的弱化版,只是去掉了“最大”的限制。

我们考虑如何建立一棵失配树(fail 树),对于每一个长度为 i i i 的前缀,我们预处理出它的 nxt,然后按照 i i i 指向 nxt[i],即 nxt[i] i i i 的爹。

对于两个前缀的最长 Border,我们只需要对于两个区间的 i i i j j j 求出它们的 LCA 即可。这里需要注意一个坑,如果 i i i j j j 的 LCA 是他们中的一个,那么我们要把 LCA 上提一步,即返回 f[i][0]f[j][0](返回他们的父亲)。


练手板子题

代码如下:

#include <bits/stdc++.h>
using namespace std;const int maxn=1e6+5;
char s[maxn];
int f[maxn][25],dep[maxn];int lca(int x,int y)
{if(dep[x]<dep[y]) swap(x,y);for(int i=20;i>=0;i--) if(dep[f[x][i]]>=dep[y]) x=f[x][i];if(x==y) return f[x][0];for(int i=20;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];return f[x][0];
}int main()
{scanf("%s",s+1);int len=strlen(s+1);f[0][0]=f[1][0]=0;dep[0]=0;dep[1]=1;for(int i=1,j=0;i<=len;i++){while(j&&s[i+1]!=s[j+1]) j=f[j][0];if(s[i+1]==s[j+1]) j++;f[i+1][0]=j,dep[i+1]=dep[j]+1;}int m;cin>>m;for(int j=1;j<=20;j++) for(int i=1;i<=len;i++) f[i][j]=f[f[i][j-1]][j-1];while(m--){int p,q;cin>>p>>q;cout<<lca(p,q)<<endl;}return 0;
}
http://www.yayakq.cn/news/555087/

相关文章:

  • 宁波 做网站的app制作外包公司
  • 滨海新区建设网站网站配色 要用什么原则
  • 外包公司做的网站快速排名优化推广价格
  • 怎么建设网站是什么网站开发涉及到缓存吗
  • 厚街网站建设价格最新国际新闻 大事件
  • 海口网站排名汕头好的建站网站
  • 南昌网站排名国家企业信用公示信息网
  • 深圳 汽车网站建设网络运营是干什么的
  • 长沙企业网站建设优度360优化大师官方版
  • 绵阳 网站网站如何做视频链接地址
  • 信息发布型网站是企业网站的什么如何给wordpress添加网站图标
  • wordpress发不了文章优化网站seo方案
  • 上海营销型网站开发免费详情页模板网站
  • 怎么识别网站开发语言新网wordpress
  • 佛山招收网站设计网站程序有哪些
  • 购物网站,购物车界面如何做网页如何赚钱
  • 建设网官方网站免费做全网解析电影网站赚钱
  • 餐饮业网站建设招标书空间查看网站
  • 电梯网站建设无锡网站建设 君通科技
  • 扫码支付做进商城网站房地产网站怎么做
  • 凡科建的网站怎么样怎么做网站赚流量
  • 做网站的需要哪些职位网站开发的前端框架有哪些
  • 太原网站制作推荐公司网站怎么做产品图片
  • 微信与网站对接企业年金查询app
  • 宠物用品销售网站建设和技术现状高端饰品品牌有哪些
  • 域名注销期间网站还能打开吗网站开发实例模板
  • 重庆建设网站公司哪家好aso优化工具
  • 物联网平台网站推广网站有哪些平台
  • 网站导航固定欧美网站建设公司排名
  • 入侵wordpressseo实战密码pdf