字典树
Posted yZi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字典树相关的知识,希望对你有一定的参考价值。
1 const int maxn = 1e5 + 7; 2 const int SIZE = 10;// 字符数量,如小写字母改为26,记得修改getid 3 4 struct Dictionary_tree{ 5 int cnt; 6 int next[maxn][SIZE]; 7 int val[maxn]; 8 9 void init(){ 10 cnt = 0; 11 memset(next[cnt],-1,sizeof(next[cnt])); 12 val[0] = 0; 13 } 14 15 void add(){ 16 cnt++; 17 memset(next[cnt],-1,sizeof(next[cnt])); 18 val[cnt] = 0; 19 } 20 int getid(char c){ 21 return c - ‘0‘; 22 } 23 int build(char *s,int v){ 24 int now = 0; 25 for(int i=0;s[i];i++){ 26 int id = getid(s[i]); 27 if(next[now][id] == -1){ 28 add(); 29 next[now][id] = cnt; 30 } 31 now = next[now][id]; 32 if(val[now] == 1) return 1; 33 } 34 val[now] = v; 35 return 0; 36 } 37 38 int query(char *s){ 39 int now = 0; 40 for(int i=0;s[i];i++){ 41 int id = getid(s[i]); 42 if(next[now][id] == -1) return -1; 43 now = next[now][id]; 44 } 45 return val[now]; 46 } 47 }tre;
以上是关于字典树的主要内容,如果未能解决你的问题,请参考以下文章