Cod sursa(job #2588627)

Utilizator BourucLiviuBouruc Petru Liviu BourucLiviu Data 25 martie 2020 08:06:06
Problema NFA Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <vector>
#include <cstring>
#include <queue>

using namespace std;

ifstream fin ("nfa.in");
ofstream fout("nfa.out");

int n, m, q0;
vector <pair <int, char> > G[100001];
bool f[100001];
char s[100001];
queue <int> Q;

bool DFS(int nod, int poz)
{
    if(poz == strlen(s))
        return f[nod];
    int sol = 0;
    for(int i = 0; i < G[nod].size(); ++i)
        if(G[nod][i].second == s[poz])
            if(DFS(G[nod][i].first, poz+1) == 1) sol = 1;
    return sol;
}

void subp_b()
{
    int q;
    fin >> q;
    while(q--)
    {
        fin >> s;
        fin.get();
        fout << DFS(q0, 0) << '\n';
    }
}

/*void subp_c()
{
    Q.push(q0);
    while(!Q.empty())
    {
        int nod = Q.front();
        for(int i = 0; i < G[nod].size(); ++i)
     //       if(G[nod][i])
    }
}*/

int main()
{
    int k;
    fin >> n >> m >> k;
    fin >> q0;
    for(int i = 1, qf; i <= k; ++i)
    {
        fin >> qf;
        f[qf] = 1;
    }
    for(int i = 1; i <= m; ++i)
    {
        int q1, q2;
        char c;
        fin >> q1 >> q2 >> c;
        G[q1].push_back(make_pair(q2, c));
    }

    subp_b();
  //  subp_c();
    return 0;
}