【模板】Trie树

来源:互联网 发布:网络机顶盒看电影 编辑:程序博客网 时间:2024/06/18 06:30
struct ldx{    int ch[500005][27];    int v[500005];    bool pa[500005];    int sz;    void Trie()    {        sz=1;        memset(ch[0],0,sizeof(ch[0]));        memset(pa,0,sizeof(pa));        v[0]=0;    }    int idx(char x)    {        return x-'a'+1;    }    void insert(string s)    {        int len=s.size(),u=0;        for(int i=0;i<len;i++)        {            int x=idx(s[i]);            if(ch[u][x]==0)             {                ch[u][x]=sz;                memset(ch[sz],0,sizeof(ch[sz]));                v[sz]=0;sz++;            }            u=ch[u][x];        }        v[u]=1;    }    int search(string s)    {        int len=s.size(),u=0;        for(int i=0;i<len;i++)        {            int x=idx(s[i]);            if(ch[u][x]==0) return -1;            u=ch[u][x];        }        if(v[u]==0) return -1;        if(v[u]==1 && pa[u]==0) return pa[u]=1,0;        if(v[u]==1 && pa[u]==1) return 1;    }};
原创粉丝点击