1 struct Trie
2 {
3 const static int maxsig=26;
4 const static int maxn=500000;
5 struct node
6 {
7 int next[maxsig];
8 int cnt;
9 }Trienode[maxn];
10 int size;
11 void init()
12 {
13 memset(Trienode[0].next,0,sizeof(Trienode[0].next));
14 Trienode[0].cnt=0;
15 size=1;
16 }
17 int getid(char c)
18 {
19 return c-'a';
20 }
21 void insert(char *s,int res)
22 {
23 int n=strlen(s);
24 int now=0;
25 for(int i=0; i<n; i++)
26 {
27 int c=getid(s[i]);
28 if(!Trienode[now].next[c])
29 {
30 memset(Trienode[size].next,0,sizeof(Trienode[size].next));
31 Trienode[size].cnt=0;
32 Trienode[now].next[c]=size++;
33 }
34 now=Trienode[now].next[c];
35 }
36 Trienode[now].cnt=res;
37 }
38 int find(char *s)
39 {
40 int now=0,i;
41 int n=strlen(s);
42 for(i=0; i<n; i++)
43 {
44 int c=getid(s[i]);
45 if(Trienode[now].next[c])
46 now=Trienode[now].next[c];
47 else break;
48 }
49 if(i==n&&Trienode[now].cnt)
50 return Trienode[now].cnt;
51 else return 0;
52 }
53 }tree;