trie树
Posted KaaaterinaX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了trie树相关的知识,希望对你有一定的参考价值。
这dp实在是d不动了,那我先学几个数据结构!
Trie树可以用于快速存储和查找字符串集合。
而且代码非常简短,以下是一个最基础的trie树结构。
随便揪一张图片:
基础题的代码实现:
Shortest Prefixes
const int maxn=2e4+7;
int s[maxn][26];//s[i]['a'-'a']=v,i为当前节点编号,s[i]['a']为‘a’的子节点的编号
int idx=0;
int cnt[maxn];//每个节点出现了多少次
void insert(string x){
int p=0;
for(int i=0;i<x.size();i++){
if(!s[p][x[i]-'a']){
s[p][x[i]-'a']=++idx;
}
p=s[p][x[i]-'a'];
cnt[p]++;
}
}
void query(string x){
int p=0;
string ans;
for(int i=0;i<x.size();i++){
ans+=x[i];
p=s[p][x[i]-'a'];
if(cnt[p]==1)
break;
}
cout<<x<<' '<<ans<<endl;
}
string x[2000];
int main(){
//建立字典树
string a;
int id=0;
while(cin>>a){
insert(a);
x[++id]=a;
// if(id==12){
// break;
// }
}
for(int i=1;i<=id;i++){
query(x[i]);
}
}
(字典树结构是真的简单易懂,但是题目可以出得很有意思)
比如说这个题:
3485. 最大异或和
(好久之前的acwing每日一题^╮( ̄▽ ̄"")╭)
以上是关于trie树的主要内容,如果未能解决你的问题,请参考以下文章