BZOJ 1819: [JSOI]Word Query电子字典

建出Trie树暴力扫一遍。

#include
#define N 200100
using namespace std;
int s[N][26];
int cx[N],en[N];
char c[N];
int n,m,cnt,l;
void insert(int &p,int w){
	if(!p) p=++cnt;
	if(w==l){
		en[p]=1;
		return;
	}
	insert(s[p][c[w]-'a'],w+1);
}
bool query(int p,int w){
	if(!p) return 0;
	if(w==l) return en[p];
	return query(s[p][c[w]-'a'],w+1);
}
void dfs(int p,int w,int f,int t){
	if(!p) return;
	if(w==l){
		if(f){
			cx[p]=t;
			return;
		}
		for(int i=0;i<26;i++) dfs(s[p][i],w,1,t);
		return;
	}
	dfs(s[p][c[w]-'a'],w+1,f,t);
	if(!f){
		for(int i=0;i<26;i++) dfs(s[p][i],w,1,t);
		for(int i=0;i<26;i++) dfs(s[p][i],w+1,1,t);
		dfs(p,w+1,1,t);
	}
}
int main(){
	scanf("%d%d",&n,&m);
	cnt=1;
	for(int i=0;i

你可能感兴趣的:(JSOI,bzoj,Trie,BZOJ,JSOI,Trie)