8.10 trie树模板
Posted -ifrush
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8.10 trie树模板相关的知识,希望对你有一定的参考价值。
字典树是一种很简单的数据结构,就是将字符串存在书上,相同前缀进行压缩
模板题:http://acm.hdu.edu.cn/showproblem.php?pid=1251
#include<bits/stdc++.h> #define fi first #define se second #define rep( i ,x ,y ) for( int i= x; i<= y ;i++ ) #define reb( i ,y ,x ) for( int i= y; i>= x ;i-- ) #define mem( a ,x ) memset( a ,x ,sizeof(a)) using namespace std; const int maxn = 500000; char s[100] ; int trie[maxn][30] ,sum[maxn]; int tot = 0; //更新 void updata( ) int len = strlen( s ); int root = 0; for( int i = 0 ;i<len ;i++) int id = s[i] - ‘a‘; if( !trie[root][id] )trie[root][id] = ++tot; root = trie[root][id]; sum[root]++; //查找 int find( ) int len = strlen( s ); int root = 0; for( int i = 0; i < len ;i++ ) int x = s[i] - ‘a‘; //cout<<s[i]<<endl; if( !trie[root][x] )return 0; root = trie[root][x]; // cout<<root<<endl; return sum[root]; int main( ) mem( trie , 0 ); mem( sum ,0 ); while( 1 ) gets( s ); if( s[0] == ‘\0‘ )break; updata( ); while( ~scanf("%s" ,&s) ) printf("%d\n" ,find( ) ); return 0;
以上是关于8.10 trie树模板的主要内容,如果未能解决你的问题,请参考以下文章