廣義字尾自動機板子題廣義字尾自動機的建圖方法大概就是在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個字串的子串 注意包括本身 第...