首页 > 代码库 > HDU1671-trie树
HDU1671-trie树
逼格最高的程序。。但是由于是动态开辟,POJ上超时了,HDU过了,不知道为什么。
trie树很简单,没什么说的。
附标程:
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 char num[100]; 8 struct sontype{int sonnum,sonplace;}; 9 struct node{ 10 vector <sontype> son; 11 int freq; 12 bool endflag; 13 }; 14 vector <sontype> mynull; 15 vector <node> E; 16 int root=0; 17 bool f; 18 19 bool trie_insert(char *a){ 20 int now=root,l=0; 21 while(l<strlen(a)){ 22 int tmp=(a[l]-‘0‘); 23 bool flag=false; 24 for(int i=0;i<E[now].son.size();i++){ 25 sontype t1=E[now].son[i]; 26 if(t1.sonnum==tmp){ 27 E[t1.sonplace].freq++; 28 now=t1.sonplace; 29 flag=true; 30 break; 31 } 32 } 33 if(!flag){ 34 E[now].son.push_back((sontype){tmp,E.size()}); 35 now=E.size(); 36 E.push_back((node){mynull,1,0}); 37 } 38 l++; 39 if(l==strlen(a)){ 40 E[now].endflag=1; 41 if(E[now].freq>1) return false; 42 } 43 else{if(E[now].endflag) return false;} 44 } 45 return true; 46 } 47 void trie_clear(){ 48 f=false;root=0; 49 E.clear(); 50 E.push_back((node){mynull,0,0}); 51 } 52 53 54 55 int main(){ 56 int t,n; 57 scanf("%d",&t); 58 while(t--){ 59 trie_clear(); 60 scanf("%d",&n); 61 for(int i=0;i<n;i++){ 62 scanf("%s",num); 63 if(!trie_insert(num)) f=true; 64 } 65 printf(f?"NO\n":"YES\n"); 66 } 67 68 return 0; 69 }
HDU1671-trie树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。