字典树
tree.insert(s,v); 插入字符串s,其中v为字符串的序号(从1开始)。
tree.exist(s); 检测字符串s是否存在。
struct Trie { int ch[1000005][26]; int val[1000005]; int size; Trie() { size=1; memset(ch[0],0,sizeof(ch[0])); } int idx(char c) { return c-'a'; } void insert(char *s,int v) { int u=0,len=strlen(s); for (int i=0;i<len;i++) { int c=idx(s[i]); if (!ch[u][c]) { memset(ch[size],0,sizeof(ch[size])); val[size]=0; ch[u][c]=size++; } u=ch[u][c]; } val[u]=v; } bool exist(char *s) { int u=0,len=strlen(s); for (int i=0;i<len;i++) { int c=idx(s[i]); if (!ch[u][c]) { return false; } u=ch[u][c]; } if (val[u]) return true; else return false; } } tree;