RT
trie树是一种用于实现字符串的快速检索的树结构;大该是每个节点都有若干个指向字符的指针;如图:
好像看不清,不过没多大事;
然后trie树支持两个操作:插入,查找;
先放代码
struct data p=trie[p].son[ch]; } trie[p].have=true; } int f(char *s) { int len=strlen(s),p=0; for(int k=0;k<len;++k) { int ch=s[k]-‘a‘; if(!trie[p].son[ch]) return false; p=trie[p].son[ch]; } if(!trie[p].have) return false;//其实写return trie[p].have 就行; }
然后就可以来到例题https://www.luogu.org/problemnew/show/P2580;
但是这学了trie树还需要一个树上dfs
比如我们可以按字典序记录;
void dfs(int p) { if(trie[p].num) a[trie[p].num]=++t; //当他是结尾时,标记,a数组存的是字符串编号 for(int i=0;i<26;++i) { if(trie[p].son[i]) dfs(trie[p].son[i]); } }
以后再补充;