bzoj3277 串 廣義字尾自動機

2021-08-28 16:40:52 字數 1051 閱讀 7693

廣義字尾自動機板子題

廣義字尾自動機的建圖方法大概就是在trie上按bfs序來建圖,這裡的last節點應該是trie上父親的last節點

然後這裡按題目要求記right為在至少k個串走過的方案,具體建法就是先把每個串跑一遍然後在parent樹上更新所有父親節點的答案,注意不要判重。然後掃一遍所有節點如果right>k就把val設成maxlen-minlen(minlen=parent樹上的fa->maxlen)

最後用父親節點更新子節點就行了。

#includeusing namespace std;

const int n=2e5+5,sz=26;

int n,k;

char ch[n];

int l[n],r[n],tot;

struct suffixautomaton

t[n];

int root,cnt;

inline int newnode(int _len=0)

inline void init()

inline int ins(int c,int last)//"c=(char)-'a';

return nq;

}int topo[n],buc[n];

inline void toposet()

inline void cal_right()

}inline void preset()t[n];

int cnt;

inline void ins(char s)}}

inline void bfs()}}

}trie;

char str[n];

int main()

trie.bfs();

for(int i=1;i<=n;i++)

}sam.preset();

for(int i=1;i<=n;i++)else now=sam.root;

}printf("%d ",ans);

}return 0;

}

bzoj 3277 串 (廣義字尾自動機)

time limit 10 sec memory limit 128 mb submit 357 solved 144 submit status discuss 字串是oi界常考的問題。現在給定你n個字串,詢問每個字串有多少子串 不包括空串 是所有n個字串中至少k個字串的子串 注意包括本身 第一行...

BZOJ 3277 串 廣義字尾自動機

判斷乙個串是否在至少k個字串裡面的方法後3473一樣,每新增乙個新的字元就沿fail鏈更新。剩下的問題就只是剩下了,每增加乙個新的字元,共多出現了多少個新的字串,如果不要求重複,那麼很顯然就是len u len fail u 這裡重複的字串也需要加入答案所以只用沿fail鏈dfs一下,sum u f...

BZOJ3277 串 廣義字尾自動機

time limit 10 sec memory limit 128 mb submit 1196 solved 478 submit status discuss 字串是oi界常考的問題。現在給定你n個字串,詢問每個字串有多少子串 不包括空串 是所有n個字串中 至少k個字串的子串 注意包括本身 第...