luogu 字符串口胡合集
P3065 [USACO12DEC]第一!First! 建立trie树,对于每个字符串的每个字符,容易想到必定小于他的兄弟字符,用拓扑排序判断是否有冲突即可 P4070 [SDOI2016]生成魔咒 求S每个前缀有多少本质不同的子串 可知SAM每次加入一个字符后增加的本质不同的字符串是新增的结点maxlen[np] - minlen[np] + 1 = len[np] - len[fa[np]] #include<bits/stdc++.h> using namespace std; #define LL long long const int maxn = 1e5 + 10; int len[maxn << 1],fa[maxn << 1]; unordered_map<int,int> son[maxn << 1]; int size,last; void Init(){ size = last = 1; } int insert(int s){ int p = last,np= ++size; last = np; len[np] = len[p] + 1; for(;p && !son[p].count(s);p = fa[p]) son[p][s] = np; if(!p) fa[np] = 1; else{ int q = son[p][s]; if(len[p] +