Cod sursa(job #2591242)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 30 martie 2020 01:42:52
Problema NFA Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("nfa.in");
ofstream g("nfa.out");

const int SIGMA=26;
const int NMAX=305;
const int LGMAX=155;
int n,k,x,y,m,start,q,sz;
char c,cuv[LGMAX];
bool stari_finale[NMAX],sol,use[NMAX][LGMAX];
int tranzitii[NMAX][SIGMA][NMAX];

void dfs(int nod,int pos)
{
    //cout<<nod<<" "<<pos<<"\n";
    if(sol)
        return;
    if(pos==sz && stari_finale[nod])
    {
        sol=1;
        return;
    }
    if(pos==sz)
        return;
    use[nod][pos]=1;
    int lit=cuv[pos]-'a';
    for(int i=1;i<=tranzitii[nod][lit][0];i++)
    {
        int next=tranzitii[nod][lit][i];
        if(!use[next][pos+1])
            dfs(next,pos+1);
    }
}
int main()
{
    f>>n>>m>>k;
    f>>start;
    for(int i=1;i<=k;i++)
    {
        f>>x;
        stari_finale[x]=1;
    }
    while(m--)
    {
        f>>x>>y>>c;
        int lit=c-'a';
        tranzitii[x][lit][++tranzitii[x][lit][0]]=y;
    }
    f>>q;
    while(q--)
    {
        f>>cuv;
        sz=strlen(cuv);
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<=sz;j++)
                use[i][j]=0;
        }
        sol=0;
        dfs(start,0);
        g<<sol<<"\n";
    }
    return 0;
}