不要递归的添加边!!!
不要递归的添加边!!!
不要递归的添加边!!!
这是递归建边的代码:
void Add(int x,string s,int pos){
if(pos==s.size()){
mark[x]=true;
return;
}
if(trie[x][s[pos]-'a']==0)trie[x][s[pos]-'a']=++cnt;
Add(trie[x][s[pos]-'a'],s,pos+1);
return;
}
这样MLE了,后来我发现不能穿string(他会复制)
于是变成了这样
void Add(int x,string &s,int pos){
if(pos==s.size()){
mark[x]=true;
return;
}
if(trie[x][s[pos]-'a']==0)trie[x][s[pos]-'a']=++cnt;
Add(trie[x][s[pos]-'a'],s,pos+1);
return;
}
这样TLE了,但是如果用循环实现
void Add(string s){
int u=root;
for(int i=0;i<s.size();i++){
int d=s[i]-'a';
if(trie[u][d]==0)trie[u][d]=++cnt;
u=trie[u][d];
}
mark[u]=true;
return;
}
就AC了