SPOJ LCS2 字尾自動機

2021-07-16 07:34:03 字數 1002 閱讀 8256

題意:

求多個串的lcs

思路:

跟上題一樣的東西….

只不過多加乙個臨時的dp陣列來儲存所有的狀態的最小值

然後求所有子串的最大值就好了

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define lowbit(x) (x&(-x))

typedef

long

long ll;

const

int maxn = 100005;

const

int inf=(1

<<28)-1;

struct sam_node

};class sam

void init()

void extend(char ch)

}last=np;

}void build(char* str)

void output()

}int dp[maxn*2];

void fun(char* str)

for(int i=tots;i>=1;--i)

}int cnt[maxn*2];

void add(char* str)

if(sam[p].son[id]==-1)

else

cnt[p]=max(cnt[p],tmp);

}for(int i=tots;i>=1;--i)

}void solve()

}sam;

char str[maxn];

int main()

SPOJ LCS2 字尾自動機

給多個字串,問最長公共子串。最長公共子串用字尾自動機還是很方便的,首先的話,有乙個非常重要的字尾自動機性質一定要明確,字尾自動機乙個點的par一定是這個點代表的所有字元子串的公共字尾。了解了這一點,我們便可以構造字尾自動機,然後進行匹配。在匹配的過程中,如果可以成功轉移,直接轉移並且把記錄的長度 就...

SPOJ LCS2 字尾自動機

題目傳送門 題目大意 還是求字串的最長公共子串,只不過這次是n個串。思路 先把第乙個串丟到sam裡面去,然後每乙個串都和前面那個串做一次最長公共子串的匹配。我們現在把sam裡面的其中乙個狀態記做 p 這個 p 其實就代表了 right 集合相同的所有子串,我們要記錄每乙個狀態下的最大匹配長度 通俗的...

spoj LCS 字尾自動機

琦不會字尾自動機 是以前太浪了 所以所有東西都留到了noi前來學 馬上狗牌退役了tat 心塞qwq 題目大意 給出兩個串a,b,求a b的最長公共子串 對a建字尾自動機,然後用b去匹配,若能匹配上就轉移到兒子,否則沿著parent樹向上跳 include include include includ...