Cod sursa(job #2595443)

Utilizator MocalinnoMoca Andrei Catalin Mocalinno Data 7 aprilie 2020 19:06:18
Problema NFA Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <bits/stdc++.h>
#define PLEC fin.close(); fout.close(); return 0;
using namespace std;
using PIC = pair<int, char>;
using VP  = vector<PIC>;
using VVP = vector<VP>;
using VB  = vector<bool>;
using VVB = vector<VB>;
ifstream fin("nfa.in");
ofstream fout("nfa.out");
VVP g;
VVB viz;
VB term;
string str;
int lenght;
bool ok;
inline void DFS(int x, int k) {
    if (k == lenght && term[x])
        ok = true;
    if (!ok && k < lenght)
        for (const PIC& P : g[x])
            if (P.second == str[k] && !viz[P.first][k]) {
                viz[P.first][k]= true;
                DFS(P.first, k + 1);
            }
}
int n, m, k, q, sef, x, y;
char ch;
int main() {
    fin >> n >> m >> k >> sef;
    term = VB(n + 1);
    for (int i = 1; i <= k; ++i) {
        fin >> x;
        term[x] = true;
    }
    g = VVP(n + 1);
    for (int i = 1; i <= m; ++i) {
        fin >> x >> y >> ch;
        g[x].emplace_back(y, ch);
    }
    fin >> q;
    for (int i = 1; i <= q; ++i) {
        fin >> str;
        lenght = static_cast<int>(str.size());
        ok = false;
        viz = VVB(n + 1, VB(lenght + 1));
        DFS(sef, 0);
        fout << ok << '\n';
    }
    PLEC
}