首页 > 其他分享 >border树模板

border树模板

时间:2023-01-15 19:44:38浏览次数:61  
标签:return int -- init border 模板

P5829 【模板】失配树

关键

这里的前缀和后缀是不能包含自己的,其他就是板子

代码

#include <bits/stdc++.h>
using namespace std;
const int M=1e6+5;

char s[M];
int ne[M];
vector<int>g[M];
void init() {
    int n=strlen(s+1);
    for(int i=2,j=0;i<=n;i++) {
        while(j&&s[i]!=s[j+1])j=ne[j];
        if(s[i]==s[j+1])j++;
        ne[i]=j;
    }
    for(int i=1;i<=n;i++)g[ne[i]].push_back(i);
}

int f[M][22],dep[M];
void dfs(int now,int fa) {
    f[now][0]=fa;
    dep[now]=dep[fa]+1;
    for(int i=1;i<=20;i++)
        f[now][i]=f[f[now][i-1]][i-1];
    for(auto to:g[now])
        dfs(to,now);
}

int lca(int x,int y) {
    if(dep[x]<dep[y])swap(x,y);
    for(int i=20;i>=0;i--)
        if(dep[x]-(1<<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);
    init();
    dfs(0,0);
    int q;cin>>q;
    while(q--) {
        int x,y;
        cin>>x>>y;
        cout<<lca(x,y)<<endl;
    }
    return 0;
}

标签:return,int,--,init,border,模板
From: https://www.cnblogs.com/basicecho/p/17054008.html

相关文章

  • effective modern c++ - 1 理解模板类别推导
    模板中的行参类型推断会省略引用在这两种模板中,行参的引用都会在推断过程中被省略template<typenameT>//templateAvoidf(T&param);template<typenameT>//temp......
  • 模板-mod类
    模板intMOD;//constintMOD=;structModInt{intx;ModInt(intx=0):x(x%MOD){}ModInt(longlongx):x(x%MOD){}intval(){......
  • 常用算法模板
    BFS单向BFS不记录层数whilequeue不空:cur=queue.pop()for节点incur的所有相邻节点:if该节点有效且未访问过:queue.push(该节点)......
  • P1886 滑动窗口 /【模板】单调队列
    滑动窗口/【模板】单调队列题目描述有一个长为\(n\)的序列\(a\),以及一个大小为\(k\)的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的......
  • 区间dp模板
    该死的csdn登陆不上去了,为了防止区间dp模板丢失,在这里再存一份然后是左右取数字的问题,我记得20年的时候我应该看过这题,是有一个数列,前后取若干个数字,问先手能取最大值那......
  • 网络流模板及易错点总结
    一、最大流#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintNN=300,MM=5e3+8,INF=0x7f7f7f7f;intn,m,s,t;intdis[NN];queue......
  • idea修改注释模板
    类头注释:打开file->setting->Editor->FilrandCodeTemplates->Includes->FileHeader 然后编辑你需要注释的内容,保存后,新建类时就会生效。......
  • 安卓笔记 0 加载模板和设置事件的DEMO
    在onCreate的方法中加载模板2种主要方式:1:setContentView(R.layout.activity_main);2:LinearLayoutmainLinearLayout=(LinearLayout)getLayoutInflate......
  • 跳过设置!直接使用KendoReact模板创建React应用程序
    KendoUI致力于新的开发,来满足不断变化的需求。现在我们非常自豪地宣布,通过React框架的KendoUIJavaScript封装来支持ReactJavascript框架。KendoReact能够为客户提供更......
  • 【lca】lca的两种模板
    对于多次询问lca的写法一般有两种……第一种是离线lca,把询问存进数组,一次dfs处理出所有答案对于每一个点,dfs到的时候给他加标记,用一个并查集把遍历完的点连起来。并且对......