void ist(int c)
{
int cur = newn();
sam[cur].len = sam[last].len + 1;
node[cur] = {cur, sam[cur].len};
sam[cur].epsiz = 1;
int p;
for(p = last; p && !sam[p].nxt[c]; p = sam[p].fa)
{
sam[p].nxt[c] = cur;
}
if(!p)
{
sam[cur].fa = 1;
}
else
{
int q = sam[p].nxt[c];
if(sam[q].len = sam[p].len + 1)
{
sam[cur].fa = q;
}
else
{
int q1 = newn();
sam[q1] = sam[q];
sam[q1].len = sam[p].len + 1;
node[q1] = {q1, sam[q1].len};
for(; p && sam[p].nxt[c] == q; p = sam[p].fa)
{
sam[p].nxt[c] = q1;
}
sam[q1].fa = sam[cur].fa = q;
}
}
last = cur;
}
这个 SAM 建图哪里错了 qwq
萌新刚学 SAM