第一次写字典树
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1671
#include <stdio.h>
#include <stdlib.h>
#define maxn 15
using namespace std;
struct Trie{
Trie * next[maxn];
int v;
};
Trie * root;
int flag;
void Init_Trie(){
root = (Trie *)malloc(sizeof(Trie));
for(int i=0;i<maxn;i++){
root -> next[i] = NULL;
}
}
void Add_Trie(char * str){
Trie * p = root , * q;
for(int i=0;str[i]!='\0';i++){
int id = str[i] - '0';
if(p->next[id]==NULL){
q = (Trie *)malloc(sizeof(Trie));
q -> v = 0;
for(int j=0;j<maxn;j++){
q -> next[j] = NULL;
}
p -> next[id] = q;
p = p -> next[id];
}
else if(p->next[id]->v){
flag = 1;
p = p -> next[id];
}
else {
p = p -> next[id];
}
}
p -> v ++;
for(int i=0;i<maxn;i++){
if(p->next[i]!=NULL)
flag = 1;
}
}
void Del_Trie(Trie * p){
for(int i=0;i<maxn;i++){
if(p->next[i])Del_Trie(p->next[i]);
}
free(p);
}
void input(){
int T;
scanf("%d",&T);
while(T--){
Init_Trie();
int n ;
flag = 0;
scanf("%d",&n);
for(int i=0;i<n;i++){
char str[15];
scanf("%s",str);
Add_Trie(str);
}
if(flag)puts("NO");
else puts("YES");
Del_Trie(root);
}
}
void File(){
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
}
int main(void){
//File();
input();
return 0;
}