警示后人,如果你真广义SAM_WA on #2
查看原帖
警示后人,如果你真广义SAM_WA on #2
578829
wjyppm1403楼主2025/7/6 20:46
    int newnode(int lst,int id){
        int cur=++tot;
        memset(nxt[cur],0,sizeof(nxt[cur]));
        sg.update(sg.rt[cur],1,m,id);
        return cur;
    }

上面是不对的,你是高贵的真广义,只有假广义这么做才是对的。

下面才是对的,因为 expand(或者 insert)返回的 lst 才是真正对应当前节点的编号,不是新建节点后的编号。

    void insert(string s,int id){
        int len=s.length();
        s=" "+s;
        int lst=0;
        for(int i=1;i<=len;i++){
            lst=extend(s[i]-'a',lst,id);
            sg.update(sg.rt[lst],1,m,id); // 在这里加
        }
    }

2025/7/6 20:46
加载中...