日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[学习笔记]后缀自动机

發(fā)布時(shí)間:2023/12/20 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [学习笔记]后缀自动机 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

解決大部分字符串問題的大殺器

給一下clj課件:戳我

SAM是一個(gè)博大精深的算法。雖然沒有像網(wǎng)絡(luò)流家族,Tarjan家族一樣拉幫結(jié)派,但是自身包含很多方法。

?

一、前言

字符串常見問題:各種匹配

1.LCP

2.子串匹配

3.模式串和主串匹配

4.回文串?也算匹配吧。。。

?

經(jīng)典例子:

給兩個(gè)串,求最長公共子串長度。

用hash表+二分,可以做到nlogn

?

后綴自動(dòng)機(jī)可以做到O(n)

?

二、概念

我們需要一個(gè)可以識(shí)別某個(gè)串是否為某個(gè)主串的子串、處理主串的子串信息、串和串之間進(jìn)行匹配的問題。

樸素的做法是,對(duì)每個(gè)子串建立一個(gè)節(jié)點(diǎn),然后連邊,O(n^2)

?

考慮的優(yōu)化是,發(fā)現(xiàn)一些子串會(huì)出現(xiàn)很多次,一些子串出現(xiàn)所有的出現(xiàn)位置的集合是同一個(gè)集合!

對(duì)這個(gè)進(jìn)行優(yōu)化

1.Right集合

對(duì)于某個(gè)串s,所有出現(xiàn)的位置的集合是:{r1,r2,...,rm}

那么,這個(gè)集合就是Right(s)

由于許多的串si,可能Right集合都是Right(s)

如果我們給定集合Right(t)

再給定屬于這個(gè)集合的字符串的長度len

隨便選擇一個(gè)r,那么這個(gè)字符串就已經(jīng)唯一確定了。

一個(gè)Right集合會(huì)包含若干個(gè)字符串

那么,其len的范圍一定是一個(gè)區(qū)間[max,min]

?

那么,為了處理方便,我們會(huì)把這些串壓縮在一起。

保留這個(gè)Right集合的max

?

我們就會(huì)定義Right(s)為一個(gè)“狀態(tài)”

這個(gè)“狀態(tài)”,包含了所有的可能匹配到的節(jié)點(diǎn)末尾的位置ri,以及可能已經(jīng)匹配出來的字符串集合si

?

*性質(zhì):兩個(gè)Right集合要么不相交,要么一個(gè)是另一個(gè)的真子集

證明:

首先易證,一個(gè)字符串屬于且僅屬于一個(gè)Right集合。

設(shè)兩個(gè)集合s1,s2相交,r是交集的某個(gè)元素

那么對(duì)于一個(gè)屬于s1的字符串string1

一個(gè)屬于s2的字符串string2

由于兩個(gè)字符串都可以以r作為末尾出現(xiàn)一次,由于一個(gè)字符串屬于且僅屬于一個(gè)集合

所以,string1!=string2

不妨設(shè)len(string1)=l1<len(string2)=l2

那么,顯然地,string2出現(xiàn)的位置,string1必然也會(huì)出現(xiàn)。

所以,s2中有的元素ri,s1中必然也有

并且,必然存在一個(gè)元素r0,滿足s1中有,但是s2中沒有(否則s1,s2其實(shí)是一個(gè)集合)

那么s2就是s1的真子集。

證畢。

?

2.Parent樹

發(fā)現(xiàn),Right集合的兩個(gè)性質(zhì)非常給力。

真子集的包含關(guān)系可以看做父子關(guān)系

Right集合之間的不相交關(guān)系可以看做非祖宗關(guān)系。

圖示:from clj

可以發(fā)現(xiàn),對(duì)于集合字符串長度,有mx[fa[i]]+1=min[i]

進(jìn)而可以這樣理解:

father集合的結(jié)束位置更多,所以滿足的字符串長度必然更短。

而且,有mx[fa[i]]+1=min[i]

葉子節(jié)點(diǎn)只有一個(gè)r

那么,如果從某個(gè)葉子節(jié)點(diǎn)往上找,那么所遍歷的長度,就是以r結(jié)尾的所有子串。

?

三、SAM的構(gòu)造

?

數(shù)組:(節(jié)點(diǎn)及$Right$集合,即所謂的“狀態(tài)”)

$fa[i]$——節(jié)點(diǎn)$parent$樹上的$father$

$ch[i][∑]$——節(jié)點(diǎn)的出邊(類比$trie$樹),指向添加字符$x$后到達(dá)的下一個(gè)節(jié)點(diǎn)($s[ri+1]==x$的會(huì)繼續(xù)匹配上,這些$ri$就構(gòu)成了目標(biāo)的節(jié)點(diǎn)。如果沒有,那么就指向$NULL$(實(shí)際不會(huì)操作,即$0$號(hào)節(jié)點(diǎn)就是$NULL$節(jié)點(diǎn)))。$∑$是字符集大小

$len[i]$——某個(gè)節(jié)點(diǎn)的所有字符串中最長的長度。

$nd$——當(dāng)前匹配的最后一個(gè)節(jié)點(diǎn)$p$。若當(dāng)前是$L$,則$Right(p)={L}$

$cnt$——節(jié)點(diǎn)個(gè)數(shù)。


我令$rt$節(jié)點(diǎn)為$1$

開始$nd=rt$

增量法構(gòu)造,即每次插入一個(gè)字符$x$。設(shè)當(dāng)前已經(jīng)插入的字符串長度是$L$

我們要做的,就是新加入這個(gè)節(jié)點(diǎn)之后,維護(hù)好所有的后綴(使得后綴都能走出來)。

需要維護(hù)$fa$指針,和$ch[∑]$指針。


(以下祖先指$parent$樹上的祖先)

建立一個(gè)$np$節(jié)點(diǎn),其實(shí)有$Right(np)={L+1}$

賦值:$len[np]=L+1$

對(duì)于$p$的祖先,$p_1,p_2,...p_k$

存在一段$p_1,p_2,...p_{v-1}$

滿足都沒有$ch[*][x]$的邊(也即都指向$NULL$)

對(duì)于$p_v$存在一個(gè)指向$x$的邊

設(shè)$q=ch[p_v][x]$,

存在兩種情況

$I$

$len[q]==len[p_v]+1$

那么意味著,之前所有的狀態(tài)$q$代表的位置都可以加一個(gè)$x$匹配上將要加入的字符

那么可以直接把$q$當(dāng)做$np$的$father$

(這個(gè)時(shí)候,其實(shí)$q$的$Right$集合發(fā)生了變化,已經(jīng)加入了一個(gè)位置$L+1$)

就可以結(jié)束這次插入。


$II$

$len[q]>len[p_v]+1$

這是什么意思?

圖示:(第一個(gè)串有一個(gè)B錯(cuò)了)

?


那么意味著,$q$拋棄了一些$p_v$的存在位置,并且使得長度增加了。

那么,$q$一定拋棄了以$L$結(jié)尾的位置。

否則,會(huì)存在一個(gè)離p更近的祖先,滿足存在指向$x$的邊。

所以,這樣的$q$匹配上$x$之后,一定不會(huì)包含$L+1$位置。


那么,這個(gè)$q$,一定不能作為$np$的$father$(因?yàn)椴话?L+1$這個(gè)位置)

所以,我們新建一個(gè)節(jié)點(diǎn)$nq$

這個(gè)$nq$的$Right$集合,其實(shí)是:$Right(q)∪\{L+1\}$

我們還要對(duì)$nq$進(jìn)行一些處理。

$fa[nq]=fa[q]$

$fa[q]=nq$

$fa[np]=nq$

$len[nq]=len[p_v]+1$

對(duì)于$nq$,所有$q$的出邊,都是$nq$的出邊

對(duì)于$ch[p_i][x]==q$的$p$的祖先(一定是連續(xù)一段),把出邊$ch[p_i][x]$都設(shè)置為$nq$

?

(這里并不會(huì)存在這種情況:p的某個(gè)祖先$p'$

使得$len[ch[p'][x]]>len[p']+1$

因?yàn)?#xff0c;處理$q$的時(shí)候,就相當(dāng)于在那個(gè)時(shí)候,加入一個(gè)$x$,$p'$會(huì)是當(dāng)時(shí)的$p_v$

在那個(gè)時(shí)候會(huì)考慮到的。


然后就可以結(jié)束了。

?

?



代碼:

luoguP3804 【模板】后綴自動(dòng)機(jī)

(注意,點(diǎn)數(shù)是2倍)

#include<bits/stdc++.h> #define reg register int #define il inline #define numb (ch^'0') using namespace std; typedef long long ll; il void rd(int &x){char ch;x=0;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x); } namespace Miracle{ const int N=3e6+6; int n,m; ll ans; char s[N]; struct SAM{int ch[N][30],cnt;int fa[N],nd;int sz[N];int hd[N],tot;int len[N];struct node{int nxt,to;}e[2*N];void init(){nd=1;cnt=1;}void add(int x,int y){e[++tot].nxt=hd[x];e[tot].to=y;hd[x]=tot;}void ins(int c,int pos){int p=nd;sz[nd=++cnt]=1;len[nd]=pos;for(;p&&ch[p][c]==0;p=fa[p]) ch[p][c]=nd;if(p==0) {fa[nd]=1;return;}int q=ch[p][c];if(len[q]==len[p]+1){fa[nd]=q;return;}len[++cnt]=len[p]+1;for(reg i=1;i<=26;++i) ch[cnt][i]=ch[q][i];fa[cnt]=fa[q];fa[q]=cnt;fa[nd]=cnt;for(;p&&ch[p][c]==q;p=fa[p]) ch[p][c]=cnt;}void build(){for(reg i=2;i<=cnt;++i) add(fa[i],i);}void dfs(int x){for(reg i=hd[x];i;i=e[i].nxt){dfs(e[i].to);sz[x]+=sz[e[i].to];}if(sz[x]!=1) ans=max(ans,(ll)sz[x]*len[x]);} }sam; int main(){scanf("%s",s+1);n=strlen(s+1);sam.init();for(reg i=1;i<=n;++i) sam.ins(s[i]-'a'+1,i);sam.build();sam.dfs(1);printf("%lld",ans);return 0; }} int main(){Miracle::main();return 0; }/*Author: *Miracle*Date: 2018/11/16 21:54:31 */

?

?

?

四、構(gòu)造正確性證明(理解)

?

其實(shí)就是實(shí)時(shí)維護(hù)好fa,len,ch[∑]

這樣就可以保證Right集合,和Parent樹的結(jié)構(gòu)和定義。

?

觀察步驟,我們可以保證,從某個(gè)狀態(tài)出發(fā),加一個(gè)字符,一定能走到新的字符串的集合的節(jié)點(diǎn);

從某個(gè)狀態(tài)出發(fā),跳father,一定可以找到一個(gè)包含當(dāng)前所有匹配位置的超集的集合。從而尋求更多的可能出邊。

?

維護(hù)了所有的后綴,所以維護(hù)了所有的子串。

并且Parent指針類似于AC自動(dòng)機(jī)的fail指針,轉(zhuǎn)到了可能可以繼續(xù)匹配的某個(gè)出現(xiàn)過的、更短的字符串。

跳一次Parent,匹配長度至少-1

所以,能失配后,快速利用保留信息,所以也可以支持匹配。

?

五、應(yīng)用

1.匹配

SP1811 LCS - Longest Common Substring

暴力匹配。

對(duì)A建SAM。

B在上面跑。

如果可以匹配,那么就匹配。len++

否則,不斷跳parent,直到有當(dāng)前字符的出邊。本質(zhì)上是通過減少匹配長度,從而增加匹配位置,從而有機(jī)會(huì)進(jìn)行匹配。

然后,len=max[new]+1

隨時(shí)更新最長匹配長度,即答案。

?

B串的匹配情況,實(shí)際上類似于尺取法

?

A串放在SAM上,實(shí)際上是從多個(gè)位置一起嘗試匹配。(因?yàn)槟硞€(gè)點(diǎn)是一個(gè)集合)

?

2.Parent樹

P3804 【模板】后綴自動(dòng)機(jī)

Parent樹上DP size。

size相同的點(diǎn)選擇最長的。

本質(zhì)上考慮到了所有的子串,每個(gè)子串會(huì)在自己出現(xiàn)所有出現(xiàn)位置的Right處被考慮到。

?

SP8222 NSUBSTR - Substrings

利用Parent樹處理出長度為某個(gè)長度的最大出現(xiàn)次數(shù)。

兒子的出現(xiàn)次數(shù),縮短之后,必然可以作為father的出現(xiàn)次數(shù)。

所以,對(duì)于全局的數(shù)組,最后從后往前,ans[i]=max(ans[i],ans[i+1])處理即可

?

本質(zhì)上,考慮Parent樹上的每個(gè)節(jié)點(diǎn),就相當(dāng)于考慮到了每個(gè)狀態(tài),也就考慮到了每個(gè)字符串。

開始每個(gè)節(jié)點(diǎn)只保留最長的子串

最后倒序取max,就相當(dāng)于考慮到了更小的子串。

?

?

P4248 [AHOI2013]差異

化簡(jiǎn)式子之后,就是兩兩后綴LCP長度之和*2

?

后綴數(shù)組+單調(diào)棧/分治

在SA序列上考慮。直接+單調(diào)棧/分治即可

詳見:[HAOI2016]找相同字符

?

SAM+Parent樹上DP

把原串反過來。后綴的最長公共前綴,就變成了前綴的最長公共后綴

兩個(gè)前綴的最長公共后綴長度,即Parent樹上LCA點(diǎn)的len長度。

所以,只要統(tǒng)計(jì)Parent樹上,某個(gè)點(diǎn)是多少個(gè)葉子節(jié)點(diǎn)的LCA,然后乘上2*len即可。

直接樹形DP即可處理。

正確性考慮每個(gè)前綴,顯然和所有的前綴在LCA處正確統(tǒng)計(jì)了貢獻(xiàn)。

(其實(shí)不建反串也沒有問題,其實(shí)長度本質(zhì)是對(duì)應(yīng)的。雖然串本身有所不同)

差異

?

?

3.第k大子串

P1368 工藝

循環(huán)同構(gòu)

SAM或者最小表示法

?

SAM:

把串復(fù)制一倍加進(jìn)去。

要選擇一個(gè)長度為n的子串,使得字典序最小。

從起始位置隨便走n步,一定不會(huì)停止。

從起始位置走n步的所有方案數(shù),對(duì)應(yīng)所有長度為n的子串。

每次貪心選擇字典序最小的走即可。

(字符集比較大,用map存出邊)

?

?

最小表示法:

開始,i=0,j=1,k=0

不斷往后匹配,如果s[i+k]<s[j+k],那么,j=j+k+1,k=0

如果s[i+k]>s[j+k],那么,i=i+k+1,k=0

如果相同,++k

i,j跳的原因是,可以直接跳過一段不可能成為最優(yōu)解開頭的位置。

最后,因?yàn)閕,j兩個(gè)點(diǎn)之一一定保留了最優(yōu)解。另一個(gè)超過了n

所以min(i,j)就是答案。

#include<bits/stdc++.h> #define reg register int #define il inline #define numb (ch^'0') using namespace std; typedef long long ll; il void rd(int &x){char ch;x=0;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x); } namespace Miracle{ const int N=300000+5; int s[2*N]; int n; int wrk(){int i=0,j=1,k=0;while(i<n&&j<n&&k<n){int t=s[(i+k)%n]-s[(j+k)%n];if(t==0) ++k;else{if(t<0) j+=k+1;else i+=k+1;if(i==j) ++j;k=0;}} return min(i,j); } int main(){scanf("%d",&n);for(reg i=0;i<n;++i) scanf("%d",&s[i]),s[i+n]=s[i];int st=wrk();for(reg i=st;i<=st+n-1;++i) printf("%d ",s[i]);return 0; }} int main(){Miracle::main();return 0; }/*Author: *Miracle*Date: 2018/11/17 10:20:49 */ 最小表示法

?

?

SP7258 SUBLEX - Lexicographical Substring Search

本質(zhì)不同的第k大串

(后綴數(shù)組可以O(shè)(nlogn)解決)

(SAM)

DAG上,從起點(diǎn)出發(fā)的路徑條數(shù)就是本質(zhì)不同子串個(gè)數(shù)。

所以,如果走到一個(gè)狀態(tài)節(jié)點(diǎn),那么從這個(gè)節(jié)點(diǎn)出發(fā)的路徑條數(shù)就是固定的。

把這些串接到之前走出來的串后面,就構(gòu)成了一個(gè)完整子串。

所以,可以反向建圖,topo+DP

就可以得到從某個(gè)點(diǎn)出發(fā),往后走,走出來的本質(zhì)不同子串個(gè)數(shù)了。

注意,可以在每個(gè)點(diǎn)停止一次。所以DP值還要特殊+1

?

然后,從起點(diǎn)開始走,選擇可以走的出邊即可。

走的時(shí)候,要減去每個(gè)點(diǎn)的1.如果是起始點(diǎn),則不能減(因?yàn)檎J(rèn)為空串不是一個(gè)串)

(當(dāng)然,如果嫌每次枚舉26條出邊太慢,可以考慮每次進(jìn)行二分,降低常數(shù))

?

P3975 [TJOI2015]弦論

重復(fù)子串可以算多個(gè)的第K大。

區(qū)別就是,可以在每個(gè)點(diǎn)多“結(jié)束”幾次。(原來是1次)

換句話說,可以創(chuàng)造出多個(gè)相同的字符串,接到原來的路徑上。

這個(gè)次數(shù),就是節(jié)點(diǎn)Right集合的大小。

Parent樹dfs處理大小。

然后直接類似上面一個(gè)題走即可。

#include<bits/stdc++.h> #define il inline #define reg register int #define numb (ch^'0') using namespace std; typedef long long ll; namespace Miracle{ const int N=500000+5; int n,t; char s[N]; struct SAM{int fa[2*N],len[2*N],sz[2*N],dp[2*N];int ch[2*N][28];int cnt,nd;int du[2*N];struct node{int nxt,to;}e[3*N],bian[2*N];int hd[2*N],ee;int pre[2*N],bb;SAM(){cnt=nd=1;}void upda(int x,int y){bian[++bb].nxt=pre[x];bian[bb].to=y;pre[x]=bb;}void add(int x,int y){e[++ee].nxt=hd[x];e[ee].to=y;hd[x]=ee;}void ins(int c,int pos){int p=nd;len[nd=++cnt]=pos;sz[cnt]=1;for(;p&&ch[p][c]==0;p=fa[p]) ch[p][c]=cnt;if(p==0){fa[cnt]=1;return;}int q=ch[p][c];if(len[q]==len[p]+1){fa[cnt]=q;return;}len[++cnt]=len[p]+1;for(reg i=1;i<=26;++i) ch[cnt][i]=ch[q][i];fa[cnt]=fa[q];fa[q]=fa[nd]=cnt;for(;p&&ch[p][c]==q;p=fa[p]) ch[p][c]=cnt;}void tree(){for(reg i=2;i<=cnt;++i) upda(fa[i],i);}void dfs(int x){for(reg i=pre[x];i;i=bian[i].nxt){int y=bian[i].to;dfs(y);sz[x]+=sz[y];}}void DAG(){for(reg i=1;i<=cnt;++i){for(reg j=1;j<=26;++j){if(ch[i][j]){add(ch[i][j],i);++du[i];}}}}void topo(){if(!t){for(reg i=2;i<=cnt;++i)sz[i]=1;}sz[1]=0;queue<int>q;for(reg i=1;i<=cnt;++i){if(du[i]==0) q.push(i);}while(!q.empty()){int x=q.front();q.pop();dp[x]+=sz[x];for(reg i=hd[x];i;i=e[i].nxt){int y=e[i].to;dp[y]+=dp[x];du[y]--;if(du[y]==0) q.push(y);}}}void query(int k){int now=1;//cout<<" dp "<<dp[now]<<endl;if(k>dp[now]) {printf("-1");return;}while(1){//cout<<" jhaahah "<<now<<" "<<sz[now]<<endl;if(k<=sz[now]) break;k-=sz[now];for(reg i=1;i<=26;++i){if(ch[now][i]){if(k>dp[ch[now][i]]) k-=dp[ch[now][i]];else {putchar('a'+i-1);now=ch[now][i];break;}}}}} }sam; int main(){scanf("%s",s+1);n=strlen(s+1);int k;scanf("%d%d",&t,&k);for(reg i=1;i<=n;++i){sam.ins(s[i]-'a'+1,i);}if(t){sam.tree();sam.dfs(1);}sam.DAG();sam.topo();sam.query(k);return 0; }} int main(){Miracle::main();return 0; }/*Author: *Miracle*Date: 2018/11/18 9:06:05 */ 弦論

?

4.與其他算法結(jié)合

?P4022 [CTSC2012]熟悉的文章

二分+DP+單調(diào)隊(duì)列+SAM

?

二分L

對(duì)于分段dp,可以直接列出式子:

dp[i]=max(dp[j]+i-j,dp[i-1]) (i-maxlen[i]<=j<=i-L)

其中,maxlen[i],表示,到了i位置,最長往前匹配的子串長度,使得這個(gè)子串是某個(gè)模板串的子串。

把模板串用'2'接起來,然后建SAM。跑出每個(gè)位置的maxlen

發(fā)現(xiàn),maxlen[i]每次最多+1,i每次加1,所以,i-maxlen[i]單調(diào)不減。

單調(diào)隊(duì)列優(yōu)化即可。

判斷dp[n]>=0.9*n即可。

O(nlogn)

?

?

P3649 [APIO2014]回文串

本質(zhì)不同O(n)個(gè)回文串,求出所有本質(zhì)不同的回文串,然后找每個(gè)串的出現(xiàn)次數(shù)。

?

(SA+二分+manacher

每一個(gè)串,通過SA數(shù)組二分左右邊界。然后出現(xiàn)次數(shù)就是(R-L+1)

?

SAM+倍增+manacher

每一個(gè)串,parent樹上,從葉子開始,倍增找符合min[i]<=len<=max[i]的節(jié)點(diǎn)i。i的Right集合大小就是該回文串出現(xiàn)次數(shù)。

?

六、廣義后綴自動(dòng)機(jī)

?多個(gè)主串匹配。

建造方法一般有兩個(gè):

法一:

把每個(gè)主串依次放進(jìn)SAM

不同主串之間,強(qiáng)制使得從root開始構(gòu)造。

法二:

對(duì)所有的主串依次插入建造出一個(gè)trie

trie上建SAM,可以dfs,或者bfs建。

只要記錄樹上x的father的SAM上的節(jié)點(diǎn)編號(hào)p,從這個(gè)p作為nd開始建即可。

?

點(diǎn)數(shù)O(2*總長度)

Parent樹,DAG圖,仍然可以使用。

Parent樹,仍然可以統(tǒng)計(jì)size等等。Right集合size的意義,是后x個(gè)主串的某些子串的出現(xiàn)個(gè)數(shù)和。。。。(對(duì)于第i個(gè)串,x應(yīng)該是n-i+1,,,n是主串個(gè)數(shù))

利用Parent樹,可以統(tǒng)計(jì)某些子串在所有串的分別出現(xiàn)次數(shù)(用size[p][i]統(tǒng)計(jì)),或者,可以判斷一個(gè)字符串是否僅屬于某個(gè)(某幾個(gè))模式串

?

發(fā)現(xiàn):

畫圖發(fā)現(xiàn),

如果對(duì)于多個(gè)主串,可能某些節(jié)點(diǎn)不能從根節(jié)點(diǎn)出發(fā)到達(dá)。那么,這樣的節(jié)點(diǎn)的路徑一定可以從其他的節(jié)點(diǎn)表示。

這樣的節(jié)點(diǎn)其實(shí)不具備實(shí)際意義(一般不予統(tǒng)計(jì)答案,但是作為一個(gè)葉子,也就是信息的存儲(chǔ)點(diǎn),一定從樹上要往上傳信息。)

因?yàn)?#xff0c;一定有l(wèi)en[i]==len[fa[i]],否則,這個(gè)點(diǎn)就有了串,但是不能從根節(jié)點(diǎn)到達(dá)。(假裝這么證是對(duì)的)

如果忽視這樣的點(diǎn),那么剩下的點(diǎn)的Right集合就有意義。

它一定代表著,這些串在所有的主串的所有出現(xiàn)位置的集合

所以,我們可以利用Parent樹,處理某個(gè)、某些字符串在個(gè)個(gè)主串的出現(xiàn)情況。

?

(當(dāng)然,如果廣義SAM要處理Right集合的大小的話,要根據(jù)建造的方法處理

1.所有的串依次從rt=1開始插入

葉子sz賦值為1,然后Parent樹上往上push。注意,不管節(jié)點(diǎn)是否有實(shí)際意義,都要push上去。因?yàn)榇硪粋€(gè)出現(xiàn)的位置

2.trie樹(其實(shí)這個(gè)就是把前綴合并在了一起,理論上更節(jié)省SAM的空間)

先要找到trie樹某個(gè)點(diǎn)的sz[x],然后插入的時(shí)候sz就是這個(gè)sz[x]

?

例題:

P4081 [USACO17DEC]Standing Out from the Herd

建立廣義SAM

每個(gè)葉子節(jié)點(diǎn),保留所屬主串的id

Parent樹上DP,統(tǒng)計(jì)某個(gè)節(jié)點(diǎn)所代表的那些字符串對(duì)某個(gè)主串答案的貢獻(xiàn)(顯然同一個(gè)節(jié)點(diǎn),最多為一個(gè)主串貢獻(xiàn)答案)

當(dāng)id只有一個(gè)的時(shí)候,ans[id[x]]+=len[id[x]]-len[fa[x]]

代碼:

#include<bits/stdc++.h> #define reg register int #define il inline #define numb (ch^'0') using namespace std; typedef long long ll; il void rd(int &x){char ch;x=0;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x); } namespace Miracle{ const int N=1e5+5; int n,m; char s[N]; ll ans[N]; struct SAM{int ch[2*N][27];int nd,cnt;int len[2*N],fa[2*N];int id[2*N];SAM(){nd=cnt=1;}struct node{int nxt,to;}e[2*N];int hd[2*N],tot;void add(int x,int y){e[++tot].nxt=hd[x];e[tot].to=y;hd[x]=tot;}void ins(int c,int pos,int lp){int p=nd;len[nd=++cnt]=pos;id[cnt]=lp;for(;p&&ch[p][c]==0;p=fa[p]) ch[p][c]=cnt;if(p==0){fa[cnt]=1;return;}int q=ch[p][c];if(len[q]==len[p]+1){fa[cnt]=q;return;}len[++cnt]=len[p]+1;for(reg i=1;i<=26;++i) ch[cnt][i]=ch[q][i];fa[cnt]=fa[q];fa[q]=fa[nd]=cnt;for(;p&&ch[p][c]==q;p=fa[p]) ch[p][c]=cnt;}void build(){//cout<<" cnt "<<cnt<<endl;for(reg i=2;i<=cnt;++i) add(fa[i],i);}void dfs(int x){for(reg i=hd[x];i;i=e[i].nxt){int y=e[i].to;dfs(y);if(id[x]==-1) continue;if(id[y]){if(id[y]==-1) id[x]=-1;else if(id[x]){if(id[x]!=id[y]) id[x]=-1;}else id[x]=id[y];}}if(id[x]!=-1) ans[id[x]]+=len[x]-len[fa[x]];//cout<<x<<" : "<<id[x]<<endl; } }sam; int main(){rd(m);for(reg i=1;i<=m;++i){sam.nd=1;scanf("%s",s+1);n=strlen(s+1);for(reg j=1;j<=n;++j){sam.ins(s[j]-'a'+1,j,i);} }sam.build();sam.dfs(1);for(reg i=1;i<=m;++i){printf("%lld\n",ans[i]);}return 0; }} int main(){Miracle::main();return 0; }/*Author: *Miracle*Date: 2018/11/19 17:09:46 */ [USACO17DEC]Standing Out from the Herd

?

?

七、理解

1.和AC自動(dòng)機(jī)比較

都是通過類似失配指針的思想,在失配的時(shí)候,盡量小地減少匹配長度,找到能夠匹配的位點(diǎn)。

SAM還是完爆AC自動(dòng)機(jī)的。畢竟AC自動(dòng)機(jī)只能處理前綴問題。。不能處理子串匹配。

?

2.SAM的用法:

SAM雖然就是一個(gè)圖但是其實(shí)博大精深!!

有一棵樹,一張DAG,方法自然多了很多。

?

①Parent樹(子串整體考慮)

樹形DP以及信息轉(zhuǎn)移——>可以賦予每個(gè)節(jié)點(diǎn)的Right以實(shí)際意義。

同樣,father關(guān)系可以推出某個(gè)狀態(tài)的最短長度min

?

②出邊(trans)的DAG(處理匹配以及單個(gè)子串)

支持topo排序DP。通常用于考慮路徑條數(shù)——對(duì)應(yīng)子串個(gè)數(shù)

支持字符串匹配。

?

③與其他算法結(jié)合(一起用)

與SA:倒不算是結(jié)合,,大部分時(shí)候,SA能做的,SAM都能做。SA不能做的,SAM也能做。

SA和SAM的思路不太一樣。

畢竟,SA:區(qū)間、區(qū)間取min、二分、ST表、單調(diào)隊(duì)列、單調(diào)棧、分治

SAM:樹形結(jié)構(gòu),DAG(路徑問題),topo排序,DP,貪心。。

用法就要看題了。

?

3.小結(jié)論/小觀察:

①某個(gè)節(jié)點(diǎn)i所管轄的字符串長度為[mini,maxi]的,有且僅有這些字符串在SAM上跑,會(huì)在i點(diǎn)結(jié)束匹配。

②跳father就是跳fail,通過減少匹配長度(當(dāng)然,這個(gè)減少后的長度必須之前跑出過。(這也是為什么要建立nq節(jié)點(diǎn)。否則跑出來的串之前都沒有存在23333)),進(jìn)而增加出現(xiàn)位置,從而尋找更多的可能有當(dāng)前字符x出邊的位置。從而進(jìn)行狀態(tài)的轉(zhuǎn)移。

由于max[fa[i]]+1=min[fa[i]],所以,其實(shí)減少匹配長度時(shí),本質(zhì)上考慮到了所有的長度。(只不過匹配位置不增加的我們不特殊考慮)

SAM和思想核心在于,對(duì)于本質(zhì)相同的字符串進(jìn)行壓縮,對(duì)所有結(jié)尾出現(xiàn)位置相同的字符串再進(jìn)行壓縮。一個(gè)點(diǎn)的集合,其實(shí)可以是很多個(gè)字符串。

我們相當(dāng)于,對(duì)一個(gè)串的所有子串,按照它們的所有結(jié)束位置分類,一起來考慮。

我們不但節(jié)省了時(shí)間和空間、考慮了所有的子串,

并且,一個(gè)子串的出現(xiàn)次數(shù),出現(xiàn)位置,以及不同子串的LCP,大小,出現(xiàn)位置比較,匹配,都可以比較輕松地處理。

?

4.Parent樹和出邊DAG的聯(lián)系

DAG為Parent樹提供構(gòu)造基礎(chǔ)。

Parent樹為DAG的點(diǎn)賦予實(shí)際意義。(例如Right集合實(shí)際大小)

?

轉(zhuǎn)載于:https://www.cnblogs.com/Miracevin/p/9974743.html

總結(jié)

以上是生活随笔為你收集整理的[学习笔记]后缀自动机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

日日干天天爽 | 久久只有精品 | 久久伊人五月天 | 国产一级做a爱片久久毛片a | 成人在线免费观看视视频 | 不卡的av电影在线观看 | 欧美日韩裸体免费视频 | 欧美日韩一区二区三区在线观看视频 | 亚洲天天做 | 天堂在线视频中文网 | 午夜精品久久久久久久99婷婷 | 久久高清国产 | 免费黄色在线网址 | 亚洲精品国产精品国自产观看 | 欧美精品国产综合久久 | 人人爱夜夜操 | 久久精品久久久久 | 成年人在线免费看视频 | 一级免费黄视频 | 婷婷在线看 | 日韩免费视频网站 | 国内小视频在线观看 | 97久久精品午夜一区二区 | 一级片色播影院 | 国产成人久久精品亚洲 | 香蕉视频在线观看免费 | 亚洲成人av影片 | 天天天综合 | 久久精品国产亚洲精品2020 | 国产精品区一区 | 国产成人黄色网址 | 国产成人综合图片 | 国产特黄色片 | 中文字幕乱偷在线 | 色橹橹欧美在线观看视频高清 | 日韩在线观看影院 | 欧美日韩视频在线观看免费 | 色99导航| 色网站在线 | 国产视频一区二区在线观看 | 中文字幕在线免费 | 首页av在线 | 国产亚洲精品xxoo | a在线免费 | 免费视频97 | 亚州精品视频 | 亚洲精品乱码久久久久久蜜桃动漫 | 精品一区二区久久久久久久网站 | 黄色aa久久| 国产网红在线观看 | 国产精品电影在线 | 免费手机黄色网址 | 亚洲精品99久久久久中文字幕 | 国产 色| 国产日韩欧美视频 | 亚洲天天做 | 丁香花五月| 视频在线99| 激情五月婷婷激情 | 精品亚洲免费视频 | 最新国产中文字幕 | 日韩综合第一页 | 91精品久久久久久久久 | 激情综合网五月 | 麻豆精品视频在线 | 国产精选在线 | 久久精品女人毛片国产 | 国内丰满少妇猛烈精品播放 | 久草视频免费观 | 日本韩国精品一区二区在线观看 | 99中文在线| 国产在线999 | 国产亚洲精品久久久久久移动网络 | 91影视成人 | 国产一区二区三区高清播放 | 精品高清视频 | 一区二区三区免费网站 | 91热| 日韩亚洲在线 | 欧美精品首页 | 精品视频在线视频 | 久艹视频免费观看 | 久久国产精品免费 | 成人小视频在线观看免费 | 手机在线免费av | 久久久久久黄色 | 丁香婷婷综合激情五月色 | 精品亚洲免费 | 九九九国产 | 精品久久99 | 日韩在线观看 | www激情com| 久久中文欧美 | av日韩国产 | 日日射av| 久久黄色a级片 | 免费a视频 | 天天鲁一鲁摸一摸爽一爽 | 国产一级性生活 | 免费久久久久久 | 欧美大片第1页 | 免费看的黄色小视频 | 欧美黑吊大战白妞欧美 | 国产经典 欧美精品 | 日韩激情一二三区 | 国产韩国日本高清视频 | 日韩精品一区二区电影 | 久久国产精品二国产精品中国洋人 | 国产精品美女久久久久久久 | 九九热视频在线免费观看 | 国产亚州av | 国产综合香蕉五月婷在线 | av高清不卡| 91在线操 | aaa黄色毛片 | 欧美aaa视频 | 久久久久久久久久久久久久免费看 | 婷婷网在线 | 国产视频91在线 | 91视频在线观看免费 | 久久激情久久 | 911免费视频 | 日韩中文在线字幕 | 色综合天天综合 | 在线观看一区视频 | 91视频高清完整版 | 国产专区在线看 | 久久网址 | 日韩视频免费在线观看 | 国产高清福利在线 | 美女久久久久久久久久 | 中文字幕一区二区在线观看 | 亚洲电影一区二区 | 黄色日视频 | 91视频链接| 992tv又爽又黄的免费视频 | 国产一区精品在线观看 | 国产欧美综合视频 | 亚州日韩中文字幕 | 国产最新在线 | a视频在线观看 | 中文字幕日韩一区二区三区不卡 | a天堂免费 | 日韩欧美视频在线播放 | 国产中文欧美日韩在线 | 精品在线观看免费 | 国产视频在线看 | 99热官网| 午夜久久成人 | 精品一区在线 | 最新国产视频 | 在线观看一二三区 | 中文字幕精品久久 | 色先锋资源网 | 中文字幕在线播放一区二区 | a级免费观看 | 日韩av播放在线 | 精品视频久久久久久 | 日韩成人在线一区二区 | 免费影视大全推荐 | 久久人人精 | 久久精品国产精品亚洲 | 国产欧美日韩精品一区二区免费 | 伊人网av| 国产精品人人做人人爽人人添 | 激情欧美网 | 国产黄色特级片 | 欧美伊人网 | 天天干天天做 | 91九色视频导航 | 国产私拍在线 | 国产日韩欧美精品在线观看 | 人人草在线视频 | 人人干人人搞 | 国产在线日韩 | 久久免费观看视频 | 一级一片免费看 | 日韩综合色| 最新国产精品久久精品 | 国产99久久久精品视频 | 黄色三级av | 四虎在线永久免费观看 | 91亚洲精品在线观看 | 永久免费精品视频网站 | 亚洲精品色视频 | 亚洲高清在线视频 | 国产中文视 | 三级黄色大片在线观看 | 亚洲精品视频在线观看网站 | 天天综合天天做 | 九九精品视频在线观看 | 久久久久久久久综合 | 欧美另类交人妖 | 狠狠色丁香九九婷婷综合五月 | 免费色网 | 成人国产一区 | 香蕉久草 | 精品国产乱码一区二区三区在线 | 美女免费黄视频网站 | 国产九九热视频 | 国产精品免费久久久久久 | av网在线观看 | 国产成人精品电影久久久 | 97精品国产97久久久久久久久久久久 | 国产不卡毛片 | www.在线观看av| 久精品视频在线 | 日日综合网 | 天天拍天天爽 | 亚洲精品国偷拍自产在线观看蜜桃 | 在线国产小视频 | 中文字幕av在线 | 国产精品毛片久久久久久久 | 特级毛片在线免费观看 | 国产中文字幕视频 | 麻豆成人精品视频 | 欧美在线视频免费 | 午夜神马福利 | 国产成人一区二区在线观看 | 人人爱人人添 | 69视频永久免费观看 | 黄色大片免费播放 | 久久久久久久久久久久影院 | jizz18欧美18 | 黄色网址中文字幕 | 欧美aaa级片 | 日日精品 | 亚洲高清91 | 国产精品亚洲视频 | 国产一在线精品一区在线观看 | 欧美黄色免费 | 伊人午夜视频 | 香蕉手机在线 | 久久网站av | 久久国产精品99久久久久久丝袜 | 黄色免费观看网址 | 最近2019年日本中文免费字幕 | 日韩欧美视频在线免费观看 | 亚洲人成人在线 | 亚洲精品婷婷 | 国产麻豆电影在线观看 | 四虎在线免费视频 | 成人在线观看日韩 | av久久在线 | 99精品偷拍视频一区二区三区 | 色婷久久| 99热精品国产一区二区在线观看 | 欧美影片 | 视频在线观看一区 | 亚洲黄色免费观看 | 日韩精品免费一区二区在线观看 | 在线观看亚洲专区 | 69视频国产 | 精品久久久久久国产偷窥 | 国产高清精品在线 | 最近中文字幕免费大全 | 9999毛片| 又黄又爽又刺激的视频 | www.亚洲黄| 999ZYZ玖玖资源站永久 | 色婷婷综合成人av | 色88久久| 国产精品一区二区av日韩在线 | 81国产精品久久久久久久久久 | 国产艹b视频 | 久热精品国产 | 日韩网站一区二区 | 6080yy午夜一二三区久久 | 久久婷婷亚洲 | 日韩精品欧美视频 | 色天堂在线视频 | 涩av在线 | 欧美日韩一区二区三区在线免费观看 | 日韩中文字幕视频在线观看 | 黄色一级在线免费观看 | 丁香综合网 | 国产亚洲欧美精品久久久久久 | 人人爽人人射 | 97视频网址 | 久草精品视频在线播放 | 99视频免费在线观看 | 日韩在线视频精品 | 手机在线免费av | 亚洲视屏 | 五月天激情电影 | 日韩久久激情 | 免费人成网ww44kk44 | 亚洲高清资源 | 天天爽天天爽夜夜爽 | 天天色播 | 日韩在线电影一区 | 视频二区| 久久精品久久99 | 精品国产91亚洲一区二区三区www | 日韩av线观看 | 91精品久久久久久久久久入口 | 国产综合91 | 欧美少妇18p| 久草网站在线观看 | 精品国产免费久久 | 8x8x在线观看视频 | 国产美女精品视频免费观看 | 欧美资源| 欧美伦理电影一区二区 | 五月天电影免费在线观看一区 | 999久久久久久久久久久 | 伊人日日干| 女人18毛片a级毛片一区二区 | 永久精品视频 | 日韩视频免费在线观看 | av免费看网站 | 国产成人精品一区二区在线 | 热久精品| 狠狠色网 | 揉bbb玩bbb少妇bbb | 国产高清视频在线播放 | 在线你懂| 天天综合天天综合 | 欧美色图30p| 国产中文在线视频 | 国产96在线观看 | 中文字幕久久亚洲 | 99在线观看免费视频精品观看 | 欧美精品一区在线发布 | 成人一区二区三区在线观看 | 国产精品久久久久久久久软件 | 极品久久久久久久 | 毛片3| 久热av| 午夜久久影视 | 亚洲国产小视频在线观看 | 国产成人精品一区二区在线观看 | 久久成人欧美 | 亚洲成人在线免费 | 欧美一级高清片 | 国产手机在线视频 | 99精品欧美一区二区三区 | 国产一级黄色片免费看 | 2019天天干天天色 | 婷婷久月 | 亚洲精品一区二区久 | 国内精品久久久久久久久久清纯 | 日韩在线视频免费观看 | 国产真实精品久久二三区 | 久久视频在线免费观看 | 欧美久久九九 | 91亚洲精品久久久久图片蜜桃 | 黄色一级在线免费观看 | 日本中文字幕视频 | 天天操天天射天天爽 | 国产亚洲成人网 | 久久少妇免费视频 | 日韩中文在线视频 | 99久久久国产精品 | 97网站| 丁香综合五月 | 久草在线手机观看 | 国产成人精品女人久久久 | 欧美日韩精品在线一区二区 | 九九久久久久久久久激情 | 国产裸体视频bbbbb | 色老板在线| 911精品视频 | 国产精品门事件 | 狠狠操在线 | 在线亚洲欧美视频 | 成人久久国产 | 免费看国产曰批40分钟 | 成人福利在线 | а天堂中文最新一区二区三区 | 国产黄色av影视 | 婷婷精品国产欧美精品亚洲人人爽 | 日本中文字幕视频 | 婷婷六月天丁香 | 国产精品久久一区二区无卡 | 成人免费视频网 | 深爱开心激情网 | 狠狠色丁香婷婷综合欧美 | 久草在线最新免费 | 日韩av免费一区 | 国产97超碰 | 久久夜夜爽 | 久久久久一区二区三区四区 | 国产精品自拍在线 | 在线观看免费成人 | 91尤物国产尤物福利在线播放 | 九九在线国产视频 | 久久天天拍 | 中文字幕亚洲欧美 | 在线v片免费观看视频 | 91porny九色在线播放 | 黄色片网站av | 天堂在线成人 | 婷婷国产视频 | 超碰在线最新网址 | 久久这里只有精品视频99 | 欧美日韩视频在线一区 | 91大神免费在线观看 | 午夜精品电影一区二区在线 | 欧美精品久久久久久久久老牛影院 | 欧美在线视频不卡 | 99精品国产兔费观看久久99 | 在线视频 国产 日韩 | 国产va饥渴难耐女保洁员在线观看 | 天天干天天拍天天操 | a天堂中文在线 | 国产香蕉97碰碰碰视频在线观看 | 偷拍福利视频一区二区三区 | 久久精品伊人 | 人人干,人人爽 | 日韩美视频 | 国产精品国产精品 | 久久精品这里热有精品 | 色在线网 | 日韩精品一区二区三区中文字幕 | 久久久久久久精 | 久久精品国产亚洲精品 | 91久久一区二区 | 亚洲精品在线视频网站 | 国产一区免费视频 | 国产精品99久久久久久久久久久久 | 久久99精品国产91久久来源 | 亚洲国产精品va在线 | 成人网大片 | 精品夜夜嗨av一区二区三区 | 日韩精品一区二区三区免费观看视频 | 500部大龄熟乱视频 欧美日本三级 | 欧美精品日韩 | 国产老妇av | 国产精品美乳一区二区免费 | 亚洲激情| 91av在线免费观看 | 日韩在线网址 | 亚洲少妇xxxx | 349k.cc看片app | 午夜国产一区 | 99精品福利 | 国产一区二区三精品久久久无广告 | 国产精品美女久久久免费 | 在线三级播放 | 欧美黄色特级片 | 成片免费观看视频999 | 日韩精品在线免费播放 | 日韩在线小视频 | 欧美最新大片在线看 | 久久久久免费观看 | 久久三级毛片 | 2019中文最近的2019中文在线 | 日韩高清www | 玖玖国产精品视频 | 欧美在线久久 | 精品一区二区三区香蕉蜜桃 | 黄色午夜 | 亚洲黄色片 | 人人爽人人乐 | 女女av在线 | av电影免费在线看 | 在线观看成人小视频 | 九九九视频在线 | 叶爱av在线 | 天天操狠狠操夜夜操 | 亚洲精品乱码久久久久久久久久 | 国产精品18videosex性欧美 | 成人性生交大片免费看中文网站 | 国产黄色成人 | 久久精品九色 | 国产v在线 | 一区二区三区久久精品 | 国产精品久久久久999 | 国产探花 | 欧美视屏一区二区 | 一区二区三高清 | 久久精品视频日本 | 91精品视频在线免费观看 | 国产精品成人免费一区久久羞羞 | 五月综合网站 | 色婷婷亚洲精品 | 在线观看亚洲免费视频 | 美女久久久久久久久久 | 中文字幕一区二区三区四区在线视频 | 少妇搡bbbb搡bbb搡aa | 91在线看片| 中文视频在线播放 | 黄色av高清 | 日本黄色片一区二区 | 日韩在线免费观看视频 | 中文有码在线视频 | 9999在线视频 | 久久av影视 | 免费看国产精品 | 青春草免费在线视频 | 亚洲丝袜一区 | 久久精品香蕉 | 久久国产精品偷 | 一级黄色免费网站 | 国产免费久久久久 | 亚洲久草网 | 亚洲成人xxx | 国产成人精品久 | 精品久久国产精品 | 日韩美精品视频 | 激情综合亚洲精品 | 欧美一级免费高清 | 日本精品一区二区三区在线播放视频 | 亚洲精品国产精品国自产 | 色就色,综合激情 | 成人在线观看你懂的 | 中文字幕乱在线伦视频中文字幕乱码在线 | 免费看污污视频的网站 | 91中文视频 | 国产91精品高清一区二区三区 | 欧美日韩不卡在线观看 | 国产最新视频在线观看 | 日韩一级电影在线 | 91精品色| 五月婷婷爱 | 免费观看的av | 日韩三区在线 | 久久精品日产第一区二区三区乱码 | 91免费观看视频网站 | 91久久一区二区 | 成人久久视频 | 日韩毛片在线播放 | 激情av综合 | 国产精品第三页 | 成人国产电影在线观看 | 福利视频区 | 99久久精品免费看国产免费软件 | 欧美性久久久久久 | 精品欧美一区二区三区久久久 | 国产精品99久久免费观看 | 午夜免费福利视频 | 欧美在线观看视频一区二区 | 探花视频在线版播放免费观看 | 久草视频手机在线 | 国产精品久久久久久久久久久久久久 | 国产日韩一区在线 | 特级黄录像视频 | 97精品超碰一区二区三区 | 国产中文字幕av | 久久99国产精品 | 久99精品 | 91网址在线观看 | 九色视频自拍 | 国产精品免费观看在线 | 中文字幕久久精品一区 | 国产精品入口麻豆www | 久久精品99国产精品亚洲最刺激 | 国产精品久久久久久高潮 | 日韩免费一区二区三区 | 欧美一区日韩一区 | 中文字幕 国产视频 | 精品一区免费 | 操综合 | 97视频久久久 | 国内精品久久影院 | 成人免费xxxxxx视频 | 国产精品精品久久久久久 | 五月婷婷,六月丁香 | 国产一级高清视频 | 久久视频| 国产第一福利 | 国产精品久久久久四虎 | 婷婷久月 | 久久99精品久久久久久 | 日日夜夜爱 | 亚洲精品网站 | 国产成人精品女人久久久 | 中文字幕在线视频第一页 | 黄色影院在线观看 | 日韩成人不卡 | 五月婷婷深开心 | 在线免费性生活片 | 天天操天天爱天天干 | 五月婷婷中文网 | 天天狠狠干| 欧美精品久久久久久久久久丰满 | 91热爆在线观看 | 国产精品免费久久久久久 | 91在线免费观看网站 | 精品久久久久久综合 | 欧美a级在线 | 亚洲一区精品人人爽人人躁 | 97视频免费在线观看 | 午夜国产福利在线观看 | 午夜久久美女 | 国产精品系列在线观看 | 天天色综合1 | av大片免费看 | 国产高清不卡在线 | 国产人在线成免费视频 | 正在播放亚洲精品 | 97精品国产一二三产区 | 人人爽人人 | 日日摸日日 | 日韩电影精品 | 综合激情久久 | 99久久99久久精品免费 | 久久精品国产免费看久久精品 | 日本久热 | 色www永久免费 | 91av资源在线 | 国产一级a毛片视频爆浆 | 亚洲天堂精品视频在线观看 | 亚洲高清精品在线 | 亚洲视频专区在线 | 欧美 日韩精品 | 狠狠色丁香久久综合网 | 亚洲精品视频免费 | 天堂va欧美va亚洲va老司机 | 亚洲1级片 | 中文字幕视频 | 天天操天天干天天综合网 | 午夜精品一区二区三区在线视频 | 久久午夜电影网 | 欧美一级免费高清 | 免费网站污 | 欧美a√大片 | 色资源在线观看 | 中文字幕在线资源 | 最新中文字幕在线资源 | 久久久五月天 | 91麻豆看国产在线紧急地址 | 成人免费在线播放视频 | 国产第一页在线播放 | 九九99| 亚洲成人午夜在线 | 日韩高清国产精品 | 日韩三级视频在线观看 | 夜添久久精品亚洲国产精品 | 久久99精品国产一区二区三区 | 国产精品永久免费在线 | 免费黄色网址大全 | 久久久久久久久久亚洲精品 | 日韩h在线观看 | 精品久久一区 | 欧美色噜噜噜 | 主播av在线 | 三级黄色a | 91夫妻自拍 | 国产污视频在线观看 | 国产精品久久久久婷婷二区次 | 久久成年人视频 | 日韩一区二区免费播放 | 精品91 | 国产一级在线观看 | 国产一线二线三线在线观看 | 黄色午夜 | 欧美日韩大片在线观看 | 九九热在线免费观看 | 亚洲开心激情 | 国产精品高潮呻吟久久av无 | 亚洲精品合集 | 在线中文字幕网站 | 亚洲精品高清一区二区三区四区 | 99久久这里有精品 | 婷婷激情综合网 | 91久久精品一区二区三区 | 精品影院一区二区久久久 | 天天艹天天爽 | 中文字幕 在线 一 二 | 亚州av成人 | 久久精品亚洲综合专区 | www.天天干.com| 色偷偷88888欧美精品久久久 | 日韩精品免费在线播放 | 91成人在线观看高潮 | 亚洲综合精品视频 | 日本在线观看中文字幕无线观看 | 激情图片区 | 一区二区三区www | 又色又爽又黄高潮的免费视频 | 亚洲国产免费av | 亚洲精品综合一二三区在线观看 | 天天天干天天射天天天操 | 香蕉久久久久久av成人 | 激情喷水 | 成人午夜网址 | 欧美激情va永久在线播放 | 正在播放一区二区 | 美女黄视频免费看 | 国内视频一区二区 | 日韩av网站在线播放 | 国产精品一区二区三区久久久 | 国产一区二区高清视频 | 免费99视频 | 97超碰福利久久精品 | 久久一区二区三区国产精品 | 久久99精品久久久久久久久久久久 | 国产999精品久久久久久 | 亚洲精品一区二区18漫画 | 亚洲最新av在线网址 | 免费观看十分钟 | 免费观看黄色12片一级视频 | 伊人资源站 | 精品久久久久久电影 | 国产最顶级的黄色片在线免费观看 | 日韩免费播放 | 人成午夜视频 | 国产亚洲婷婷免费 | 亚洲精品 在线视频 | 六月丁香色婷婷 | 狠狠色丁香久久婷婷综合_中 | 免费97视频 | 久久免费的视频 | 天无日天天操天天干 | 国产精品婷婷午夜在线观看 | 久久成人18免费网站 | 999视频网站 | 成人免费毛片aaaaaa片 | 亚洲成年人免费网站 | 特级大胆西西4444www | 国内视频一区二区 | 色婷婷狠狠操 | av电影免费观看 | 国产精品久久艹 | 青草视频在线 | 最近日本中文字幕a | 久久久久黄色 | 精品色综合 | 天天色天天爱天天射综合 | 国产高清不卡一区二区三区 | 91精品国产自产在线观看永久 | 色婷婷激情综合 | www麻豆视频 | 亚洲欧美国产精品va在线观看 | 99免费在线观看 | 久草视频中文 | 色精品视频 | 日韩高清不卡一区二区三区 | 国产精品二区在线观看 | 日韩精品1区2区 | 伊人资源视频在线 | 久草在线资源免费 | 国产传媒中文字幕 | 韩日电影在线 | 免费观看一级视频 | 97超在线 | 97精品国产91久久久久久久 | 国产精品一区二区在线播放 | 久久av高清 | 日韩在线视频一区二区三区 | www五月婷婷| 亚洲综合在线五月 | 91成人精品 | 最新国产福利 | 成人免费观看完整版电影 | 热热热热热色 | 伊人资源站| 国产亚洲片| 91视频最新网址 | 色噜噜日韩精品欧美一区二区 | 国产精品国产三级国产aⅴ无密码 | 综合久久五月天 | 国产精品99久久久久久久久久久久 | 久操视频在线免费看 | 人人精品久久 | 最新中文在线视频 | 成人在线视频在线观看 | 一区二区三区精品在线视频 | 久一久久 | 国产一级片毛片 | 天天天操操操 | 国产精品一区二区在线看 | 99久久婷婷 | 久久久久女人精品毛片九一 | av观看久久久 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 日韩在线免费不卡 | 我要色综合天天 | 欧美一级在线看 | 久久久久久久久久久久电影 | 亚洲在线视频免费 | 天天操综合 | 91精品国产成人观看 | 丁香花在线观看免费完整版视频 | 久久久综合色 | 免费视频黄 | 99999精品| 激情五月av | 不卡视频国产 | 成人啪啪18免费游戏链接 | 91精品999| 精品国产欧美一区二区 | 伊人中文字幕在线 | 亚洲色图27p| 成人午夜av电影 | 黄色一级在线免费观看 | 欧美 日韩 久久 | 亚洲黄色片一级 | 精品国产伦一区二区三区 | www黄在线 | 久久久精品网 | 欧美a级在线免费观看 | 婷婷丁香花 | 亚洲国产精品va在线看黑人 | 亚洲国产精品电影 | 国产精美视频 | 午夜免费电影院 | 久精品视频免费观看2 | 国产高清成人av | 中国一级片在线播放 | 国内精品久久久久影院一蜜桃 | 亚洲电影久久久 | 天天操偷偷干 | 国产中的精品av小宝探花 | 亚洲国产成人精品久久 | 97在线观看免费高清 | 日韩肉感妇bbwbbwbbw | 西西44人体做爰大胆视频 | 成人黄在线观看 | 国产网红在线观看 | 字幕网资源站中文字幕 | 日日爽夜夜操 | www.五月天| 欧美成人区 | 日韩欧美国产免费播放 | 成人sm另类专区 | 国产成a人亚洲精v品在线观看 | 精品一区二区在线看 | 欧美日韩国产一区二区三区在线观看 | 日韩aⅴ视频 | 国产成人一区二区三区在线观看 | 99精品在线| 中文字幕第 | 久久综合狠狠综合 | 国产精品美女久久久久久免费 | 在线观看91av | 日韩中文字幕免费视频 | 日日夜夜操av | 中文字幕免费高清在线 | 蜜臀久久99精品久久久久久网站 | www国产亚洲精品 | 国产涩图| 9在线观看免费高清完整 | 精品国产乱码久久久久 | 国产精品18久久久久久久网站 | 人人澡人人舔 | 亚洲精品小视频 | 国内精品久久久久久久久久 | 日韩激情在线视频 | 成人a在线观看 | 久久国产精品一区二区 | 高清av免费看 | 偷拍精品一区二区三区 | 国产看片 色 | 午夜少妇| 色爱区综合激月婷婷 | 超碰在线1 | 久久久久99精品国产片 | 久久9999久久| 欧美日韩a视频 | 香蕉网站在线观看 | 色综合久久久久久久久五月 | 日韩免费电影网站 | 婷婷网址| 免费av网站在线看 | 在线免费观看黄色 | 日韩在线观看中文字幕 | 国产美女永久免费 | 999视频在线观看 | 1024在线看片 | 中文字幕色综合网 | av免费播放 | 精品视频免费 | 国产成人精品一区二区三区福利 | 久久观看最新视频 | 在线免费观看黄色 | 国产日韩在线观看一区 | 欧美一区免费在线观看 | 全久久久久久久久久久电影 | 久久久免费高清视频 | 国产视频一级 | 国产福利91精品一区二区三区 | 九九视频一区 | 探花视频免费在线观看 | 91九色免费视频 | 国产在线a免费观看 | 国产精品网站 | 欧美国产在线看 | 久艹在线免费观看 | 亚洲欧洲精品一区二区精品久久久 | 国产一区二区三区高清播放 | www.久久久com | 免费观看黄色12片一级视频 | 五月香婷 | 国产视频欧美视频 | 国产在线精品区 | 日韩精品视频网站 | 亚洲欧洲精品一区 | 激情深爱.com| 成人av网站在线观看 | 99re在线视频观看 | 国产亚洲综合性久久久影院 | 日韩国产精品久久久久久亚洲 | 国产成人久久精品77777 | 日韩大片在线播放 | 亚洲精品三级 | 国产精品视频地址 | 欧美va天堂va视频va在线 | 久久99精品久久久久久秒播蜜臀 | 精品久久综合 | 日韩伦理一区二区三区av在线 | 国产成人精品女人久久久 | 免费国产在线精品 | 五月天激情在线 | 黄色片免费在线 | 日韩视频免费在线观看 | 91中文视频| 亚洲欧美激情精品一区二区 | 在线视频一区二区 | 欧美日韩大片在线观看 | 正在播放国产一区二区 | 毛片网站在线 | 欧美亚洲专区 | 91精品少妇偷拍99 | 狠狠的干| 成人在线你懂得 | 亚洲,国产成人av | 激情伊人五月天久久综合 | 美女网站一区 | 中文字幕视频免费观看 | 婷婷日| 亚洲精品456在线播放第一页 | 激情小说网站亚洲综合网 | 久久久精品影视 | 亚洲 欧美 国产 va在线影院 | 天天操 夜夜操 | 国产一区欧美一区 | 欧美日韩高清一区二区三区 | 色橹橹欧美在线观看视频高清 | 国产黄色高清 | 国产精品久久久久久久电影 | 九九在线高清精品视频 | 91九色蝌蚪视频在线 | 久久精品1区2区 | 亚洲永久字幕 | 成人一级片视频 | 狠狠狠的干 | 日韩大片免费观看 | 中文字幕国产精品 | 日韩av中文字幕在线免费观看 | 99久久精品无码一区二区毛片 | 天天爽夜夜爽人人爽一区二区 | 色夜影院 | 精品二区久久 | 久久成人国产 | 在线观看亚洲专区 | 天天躁日日躁狠狠躁av中文 | 人人射人人插 | 日韩精品一区二区三区三炮视频 | 亚洲少妇自拍 | 久草视频国产 | 在线视频你懂得 | 特黄色大片 | 丁香婷婷电影 | 国产精品第2页 | 日韩视频一区二区三区 | www.夜夜 | 久久精品aaa | 免费在线一区二区三区 | 成年人视频在线免费播放 | 日日夜夜天天 | 免费精品在线 | 亚洲精品久 | 日本中文字幕在线 | 国产1区2| 手机成人在线电影 | 亚洲精品在线免费观看视频 | 日韩在线高清免费视频 | 三级av在线播放 | 成人免费一区二区三区在线观看 | 午夜视频在线观看网站 | 激情综合网五月婷婷 | 免费成人av网站 | 亚洲综合涩 | 97在线观看视频国产 | 精品视频9999 | 国产精品国内免费一区二区三区 | 中文字幕第一页在线视频 | 青青河边草免费观看完整版高清 | 亚洲国产资源 | 天天操夜夜拍 | 999在线观看视频 | 亚洲天堂色婷婷 | 日日操日日插 | 在线观看视频日韩 | 在线观看亚洲成人 | 欧美日韩视频免费看 | 天天躁日日躁狠狠躁 | 天天看天天干天天操 | 丁香九月婷婷综合 | 黄色不卡av| 激情丁香在线 | 免费视频99 | 日韩特黄av | 日韩av一区二区在线影视 | 欧美日韩免费网站 |