【模板】TRIE树
graph TB;
A(($ROOT$))
B(($a$))
C(($b$))
D(($c$))
E(($d$))
F(($d$))
A-->B-->C-->D
B-->E
A-->F
template<int the_size>
class TRIE_TREE {
private :
struct TRIE_LEAF {
int sid[26];
int value;
} leaf[the_size];
int tot, ROOT;
#define sid(u,i) leaf[u].sid[i]
#define value(u) leaf[u].value
int turn(char _target) {
return _target-'a';
}
public :
void Insert(char *pattern,int val) {
int u = ROOT;
for(int i = 0;pattern[i];++i) {
if(!sid(u,turn(pattern[i])))
sid(u,turn(pattern[i])) = ++tot;
u = sid(u,turn(pattern[i]));
}
value(u) = val;
}
int Query(char *text) {
int u = ROOT;
for(int i = 0;text[i];++i) {
if(!sid(u,turn(text[i])))
return 0;
u = sid(u,turn(text[i]));
}
return value(u);
}
void Delete(char *pattern) {
int u = ROOT;
for(int i = 0;pattern[i];++i) {
if(!sid(u,turn(pattern[i])))
return;
u = sid(u,turn(pattern[i]));
}
value(u) = 0;
}
};
TRIE_TREE<100010> trie;