Cod sursa(job #2450759)

Utilizator ejoi2019Ejoi 2019 ejoi2019 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;
}