日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P5829 【模板】失配树

發(fā)布時(shí)間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P5829 【模板】失配树 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

P5829 【模板】失配樹

題目:

題解:

參考題解
我們先想一個(gè)問題:如何求出一個(gè)字符串的所有border?
如果一個(gè)字符串既是 S的前綴又是 S 的后綴,那么我們把 SS 自己平移一下就可以前后重合,然后我們就可以繼續(xù)匹。。。。。這不就是KMP嗎

求兩個(gè)前綴的最長(zhǎng)公共border,
先對(duì)原串進(jìn)行KMP,通過跳兩個(gè)前綴的next求到兩個(gè)前綴的所有border
我們通過next數(shù)組構(gòu)建一棵樹(發(fā)現(xiàn)這就是只有一個(gè)字符串的AC自動(dòng)機(jī)的fail樹,所有我們也叫它fail樹),容易發(fā)現(xiàn)兩個(gè)前綴的最長(zhǎng)公共border就是他們?cè)趂ail樹上的LCA

綜上所述:

  • 對(duì)原串KMP一遍,求的next數(shù)組
  • 構(gòu)建fail樹
  • 在fail數(shù)上跑LCA
  • 代碼:

    #include<cstdio> #include<iostream> #include<fstream> #include<cmath> #include<cstring> #include<algorithm> using namespace std; #define Set(a) memset(a,0,sizeof(a)) #define F(i,a,b) for(register int i=a,i##end=b;i<=i##end;++i) #define UF(i,a,b) for(register int i=a,i##end=b;i>=i##end;--i) #define openf(a) freopen(#a".in","r",stdin);freopen(#a".out","w",stdout) #define re register #define ri re int #define il inline typedef long long ll; typedef unsigned long long ull; template<typename T> inline T rd(T& x) {T f=1;x=0;char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;for(; isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(T)(c-'0');x*=f;return x; } ll rd(){ll x;rd(x);return x;} inline int max(int a,int b){return a>b?a:b;} inline int min(int a,int b){return a<b?a:b;} const int inf=1<<30;const int N=1000005; int next[N],n,m;char s[N]; int fa[N]; int get(int x){return fa[x]==x?x:fa[x]=get(fa[x]);} void merge(int x,int y){if((x=get(x))!=(y=get(y)))fa[x]=y;} bool vis[N]; int head[N],to[2*N],nxt[2*N],tot; void add(int u,int v){to[++tot]=v;nxt[tot]=head[u];head[u]=tot;}//graph int head2[N],to2[2*N],nxt2[2*N],num[2*N],tot2; void add2(int u,int v,int w){to2[++tot2]=v;num[tot2]=w;nxt2[tot2]=head2[u];head2[u]=tot2;}//query int ans[N],x[N],y[N]; void tarjan(int x) {vis[x]=true;for(ri i=head[x];i;i=nxt[i]) if(!vis[to[i]]) {tarjan(to[i]);merge(to[i],x);}for(ri i=head2[x];i;i=nxt2[i]) if(vis[to2[i]]) ans[num[i]]=get(to2[i]); } int main() {scanf("%s",s+1);n=strlen(s+1);next[0]=next[1]=0;F(i,1,n) fa[i]=i;for(ri i=2,j=0;i<=n;++i){while(j!=0&&s[j+1]!=s[i]) j=next[j];if(s[j+1]==s[i]) ++j;next[i]=j;}F(i,1,n) add(next[i],i);rd(m);F(i,1,m){rd(x[i]);rd(y[i]);add2(x[i],y[i],i);add2(y[i],x[i],i);}tarjan(0);F(i,1,m) printf("%d\n",(ans[i]==x[i]||ans[i]==y[i])?next[ans[i]]:ans[i]);return 0; }

    總結(jié)

    以上是生活随笔為你收集整理的P5829 【模板】失配树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: a黄色片| 一本大道久久精品 | 日韩视频一区二区三区在线播放免费观看 | 日韩成人一区 | 色七七久久 | 色婷婷丁香 | 成人免费观看视频大全 | 久久亚洲AV无码专区成人国产 | www.国产精品 | 天降女子在线 | 宗合久久| 国产乱码精品一区二区三区五月婷 | 日韩免费观看一区二区 | 美女的奶胸大爽爽大片 | 对白刺激theporn | 女人被狂躁60分钟视频 | 六十路息与子猛烈交尾 | 尹人av | 少妇无套内谢久久久久 | 毛片网站视频 | 亚洲国产理论 | 欧美一区二区三区视频在线观看 | 神马午夜一区二区 | 国产婷婷色一区二区 | 久久久久久久久成人 | 免费看黄视频的网站 | 性综艺节目av在线播放 | 欧美日韩中出 | 在线永久看片免费的视频 | 男人私人影院 | 91插插插永久免费 | 亚洲欧美一区二区三区久久 | 天天操天天干视频 | 开心激情五月婷婷 | 日本妇女毛茸茸 | 人妻丰满熟妇aⅴ无码 | 日韩h在线 | 欧美 日韩 人妻 高清 中文 | av网站在线看 | 免费观看毛片网站 | 中文字幕av久久 | 亚洲wwwwww| 亚洲精品久久久久久 | 精品人妻一区二区三区香蕉 | 久久久久久黄色片 | 91色在线| 欧美精品999 | 久久伊人精品视频 | 无码免费一区二区三区免费播放 | 五月天av网| 亚洲精品第三页 | 国产激情自拍视频 | 九九免费精品视频 | www.人人草 | 黄网站在线免费看 | 屁屁影院第一页 | 欧美激情va永久在线播放 | 麻豆影视大全 | 中日精品一色哟哟 | 99日韩| 免费国产羞羞网站视频 | 精品视频一区二区 | 亚洲www啪成人一区二区麻豆 | 毛茸茸多毛bbb毛多视频 | 欧美在线一卡 | 色91精品久久久久久久久 | 91久久极品少妇xxxxⅹ软件 | 日韩中文字幕免费在线观看 | 欧美亚洲天堂网 | 精品国内自产拍在线观看视频 | av影片在线看 | 久久久噜噜噜久久久 | 香蕉视频国产 | 亚洲美女一区 | 另类男人与善交video | 成人精品在线 | 我们的生活第五季在线观看免费 | 日韩一级免费毛片 | 91精品国产综合久久福利软件 | 色哟哟视频网站 | 成人黄色在线播放 | 午夜亚洲福利 | 美日韩成人| 宅男噜噜噜666在线观看 | 午夜一级大片 | 久久在线精品 | 黄网在线观看免费 | 日韩在线激情 | 国产在线观| 青娱乐超碰 | 青青草视频免费观看 | 成在线人免费视频 | 一区二区三区四区中文字幕 | 特级西西人体444www高清大胆 | 欧美一级影院 | 欧美在线观看免费高清 | 自拍偷拍第二页 | 国产精品xxx视频 | 精品久久BBBBB精品人妻 |