題意:
求多個串的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...