Skip to content

Commit ad972e7

Browse files
Trie Implementation.
C++ code for Trie Implementation.
1 parent fb5b6c4 commit ad972e7

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed

Graph/trie.cpp

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
//TRIE
2+
#include <bits/stdc++.h>
3+
using namespace std;
4+
5+
#define INF 0x3f3f3f3f
6+
#define MOD 1000000007
7+
#define si(x) scanf("%d",&x)
8+
#define sii(x,y) scanf("%d%d",&x,&y)
9+
#define siii(x,y,z) scanf("%d%d%d",&x,&y,&z)
10+
#define sl(x) scanf("%lld",&x)
11+
#define sll(x,y) scanf("%lld%lld",&x,&y)
12+
#define slll(x,y,z) scanf("%lld%lld%lld",&x,&y,&z)
13+
14+
#define ll long long
15+
#define mp make_pair
16+
#define pb push_back
17+
#define nl printf("\n");
18+
#define pf printf
19+
#define rep(i,n) for(ll i=0;i<n;i++)
20+
#define repi(i,a,b) for(ll i=a;i<b;i++)
21+
#define vint vector<int>
22+
#define tci int t;scanf("%d",&t);while(t--)
23+
const int maxn=10e6+4;
24+
25+
struct Trie{
26+
struct Trie *child[27];
27+
map<char ,Trie*>m;
28+
int w;
29+
};
30+
struct Trie *getNode(void)
31+
{
32+
struct Trie *p = new Trie;
33+
p->w = 0;
34+
for (int i = 0; i < 27; i++)
35+
p->child[i] = NULL;
36+
return p;
37+
}
38+
39+
40+
int res=0;
41+
int rec(struct Trie *p)
42+
{
43+
for(int i=0;i<27;i++)
44+
{
45+
if(p->child[i]!=NULL)
46+
{
47+
res= max(rec(p->child[i]),res);
48+
}
49+
}
50+
return p->w;
51+
}
52+
53+
void insert(struct Trie *root,string s,int weight)
54+
{
55+
struct Trie *p=root;
56+
for(int i=0;i<s.size();i++)
57+
{
58+
int ind=int(s[i]-'a');
59+
if(p->child[ind]==0)
60+
p->child[ind]=getNode();
61+
p=p->child[ind];
62+
}
63+
p->w=weight;
64+
//cout<<p->w;nl
65+
}
66+
void search(struct Trie *root,string s)
67+
{
68+
int temp=0;
69+
struct Trie *p = root;
70+
for (int i = 0; i < s.size(); i++)
71+
{
72+
int ind = s[i] - 'a';
73+
//cout<<s[i]<<" ";
74+
if (!p->child[ind])
75+
{
76+
temp=1;
77+
cout<<-1<<endl;break;//return false;
78+
}
79+
p = p->child[ind];
80+
}
81+
if(p != NULL && !temp )
82+
{
83+
rec(p);
84+
cout<<res;nl
85+
}
86+
}
87+
int main()
88+
{
89+
ifstream myFile("task.in");
90+
if(!myFile.fail())
91+
{
92+
assert(freopen("task.in", "r", stdin));
93+
}
94+
struct Trie *root=getNode();
95+
int n,q;sii(n,q);
96+
rep(i,n)
97+
{
98+
string s;
99+
int weight;
100+
cin>>s>>weight;
101+
insert(root,s,weight);
102+
}
103+
while(q--)
104+
{
105+
res=0;
106+
string s;
107+
cin>>s;
108+
search(root,s);
109+
}
110+
return 0;
111+
}

0 commit comments

Comments
 (0)