参考ブログ:https://www.cnblogs.com/TheRoadToTheGold/p/6290732.html
単語トライ単語を形成するためにエンドノードへの経路に沿って、木であり、単語の接頭辞は、この経路に含まれています。一般的なオペレーティングトライは、前方一致検索を持っており、単語や語句を挿入します。
hdu1251辞書ツリーのテンプレートリンク:http://icpc.njust.edu.cn/Problem/Hdu/1251/
コードは以下の通りである:ノートへの唯一の場所は、データに読み込まれ、関数は読み込み取得がNULLの場合、空白行を読みます
1の#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3符号なしのtypedef int型のUI。 4のtypedef 長い 長LL。 5符号なしのtypedef 長い 長いULL。 6 の#define PFのprintf 7 の#define MEM(A、B)のmemset(A、B、はsizeof()) 8 の#define prime1 1E9 + 7 9 の#define prime2 1E9 + 9 10 の#define PI 3.14159265 11 の#define LSON Lを、半ば、室温<< 1 12 の#define rson半ば+ 1、R、RT << 1 | 1 13 の#define scand(X)のscanf( "%のLLF"、&x)は 14 の#define F(I、B)のための(INT iは=; I <= B; I ++) 15 の#defineスキャン()のscanf( "%のD"、&A) 16 の#define DBG(引数)COUT <<#引数<< ":" <<引数<< ENDL。 17 の#define INF 0x3f3f3f3f 18 CONST INT MAXN = 1E6 + 10 。 19 整数N、M、T。 20 チャーS [MAXN]、S1 [MAXN]。 21 INTトライ[MAXN] [ 26 ]、和[MAXN]。 22 INT CNT = 0 。 S) 24 { 25 INT RT = 0 。 26 INT LEN = STRLEN(S)。 27 F(I、0、len- 1 ) 28 { 29 INT C = S [I] - ' ' 。 30 であれば(トライ[RT] [C]!)トライ[RT] [C] = ++ CNT。 31 RT = トライ[RT] [C]。 32 和[RT] ++ ; 33 } 34 } 35 int型の検索(CHAR * S) 36 { 37 INT RT = 0 。 38 INT LEN = STRLEN(S)。 39 F(I、0、len- 1 ) 40 { 41 INT C = S [I] - ' ' 。 42 であれば(トライ[RT] [C]!)戻り0 ; 43 RT = トライ[RT] [C]。 44 } 45 リターン和[RT]。 46 } 47 のint main()の 48 { 49 // freopenは( "INPUT.TXT"、 "R"、標準入力)。 50 // freopenは( "output.txtと"、 "W"、STDOUT); 51である STD :: :: IOSのsync_with_stdio(偽の) 52は 、一方((S)取得) 53は 、{ 54は IF(S [ 0 ] == NULL)BREAK ; // 空白行に読み込まれますがNULLに変換される 55 INSERT(S) 56である } 57は 、一方((S)取得) 58 { 59 PF(" %のD \ N- " 、(S)検索); 60 } 61 }