Cod sursa(job #2593649)

Utilizator Cosminel_GosuCosminel Gosu Cosminel_Gosu Data 4 aprilie 2020 12:56:26
Problema NFA Scor 100
Compilator cpp-64 Status done
Runda corona_day6 Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;

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

void usain_bolt()
{
    ios::sync_with_stdio(false);
    fin.tie(0);
}

const int N = 3e2 + 5;

vector < pair < int, char > > a[N];

int sz;
char s[N];
bool last[N], f[N][N];

void dfs(int k, int i, bool & ok)
{
    //fout << k << " ";
    if(ok == true) return ;

    if(k == strlen(s + 1) && last[i] == true)
        ok = true;
    else if(k == strlen(s + 1)) return ;
    for(auto v : a[i]) {
        if(v.second == s[k + 1] && f[k + 1][v.first] == false) {
            f[k + 1][v.first] = true;
            dfs(k + 1, v.first, ok);
        }
    }
}

int main()
{
    usain_bolt();

    int n, m, k, fst;

    fin >> n >> m >> k >> fst;
    for(int i = 1; i <= k; ++i) {
        int x;

        fin >> x;
        last[x] = true;
    }

    for(int i = 1; i <= m; ++i) {
        int x, y;
        char ch;

        fin >> x >> y >> ch;
        a[x].push_back({y, ch});
    }
    int q;

    fin >> q;
    for(; q; --q) {

        fin >> (s + 1);

        sz = strlen(s + 1);
        bool ok = false;
        dfs(0, fst, ok);
        fout << ok << "\n";
        memset(f, 0, sizeof(f));
    }
    return 0;
}