hdu 1671(字典树)

 1 /*
 2 *  字典树 
 3 */
 4 #include <cstdio>
 5 #include <cstring>
 6 #include <cstdlib>
 7 #include <iostream>
 8 
 9 using namespace std;
10 
11 const int N = 11;
12 
13 bool yes;
14 char str[N];
15 struct node {
16     bool flag;
17     node *child[10];
18     node() {
19         flag = false;
20         for (int i=0; i<10; ++i) child[i] = NULL;
21     }
22 }*root;
23 
24 void insert(char str[]) {
25     node *p = root;
26     int len = strlen(str);
27     for (int k,i=0; i<len; ++i, p=p->child[k]) {
28         k = str[i] - '0';
29         if (!p->child[k]) p->child[k] = new node();
30         else if (i == len-1) {yes = false; return;}
31         if (p->child[k]->flag) {yes = false; return;}
32     }
33     p->flag = true;
34 }
35 
36 void del(node *p) {//释放内存 
37     for (int i=0; i<10; ++i) {
38         if (p->child[i]) del(p->child[i]);
39     }
40     delete p;
41     p = NULL;
42 }
43 
44 int main() {
45     int t;
46     scanf ("%d", &t);
47     while (t--) {
48         int n;
49         scanf ("%d", &n);
50         yes = true;
51         root = new node();
52         while (n--) {
53             scanf ("%s", str);
54             if (yes) insert(str);
55         }
56         if (yes) puts("YES");
57         else puts("NO");
58         del(root);
59     }
60     return 0;
61 }

 

posted on 2012-05-08 07:11  Try86  阅读(141)  评论(0)    收藏  举报