Cod sursa(job #2450759)
Utilizator | Data | 24 august 2019 15:39:04 | |
---|---|---|---|
Problema | Cuplaj maxim in graf bipartit | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 2.95 kb |
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
struct trie
{
int cnt;
int cnt2;
trie *kids[26];
trie()
{
cnt=cnt2=0;
for(int i=0;i<26;i++)
kids[i]=0;
}
};
trie *root=new trie;
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int jeg;
while(cin>>jeg)
{
string s;
cin>>s;
if(jeg==0)
{
trie *cur=root;
for(auto &ch : s)
{
int x=ch-'a';
if(cur->kids[x]==0)
cur->kids[x]=new trie;
cur=cur->kids[x];
cur->cnt2++;
}
cur->cnt++;
}
if(jeg==1)
{
vector <trie*> sexy;
trie *cur=root;
for(auto &ch : s)
{
int x=ch-'a';
cur=cur->kids[x];
sexy.push_back(cur);
cur->cnt2--;
}
while(!sexy.empty() && sexy.back()->cnt2==0)
{
delete sexy.back();
sexy.pop_back();
}
cur->cnt--;
}
if(jeg==2)
{
int nigga=-1;
trie *cur=root;
for(auto &ch : s)
{
int x=ch-'a';
if(cur->kids[x]==0)
{
nigga=0;
break;
}
cur=cur->kids[x];
}
if(nigga==-1)
nigga=cur->cnt;
cout<<nigga<<"\n";
}
if(jeg==3)
{
int nigga=0;
trie *cur=root;
for(auto &ch : s)
{
int x=ch-'a';
if(cur->kids[x]==0)
break;
nigga++;
cur=cur->kids[x];
}
cout<<nigga<<"\n";
}
}
return 0;
}