Cod sursa(job #2627865)

Utilizator dey44andIoja Andrei-Iosif dey44and Data 12 iunie 2020 22:53:19
Problema NFA Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <bits/stdc++.h>

#define input "nfa.in"
#define output "nfa.out"
#define NMAX 305

using namespace std;

ifstream in(input);
ofstream out(output);

struct muchie
{
    int y;
    char c;
};
vector < muchie > muchii[NMAX];
string mesaj;
int N, M, K, Q, BG, ND[NMAX];
bool ans = false, uz[NMAX][NMAX];

void DFS(int nod, int n)
{
    if(n == mesaj.size())
    {
        if(ND[nod]) ans = true;
    }
    else for(unsigned i = 0; i < muchii[nod].size(); i++)
    {
        int new_nod = muchii[nod][i].y;
        char c = muchii[nod][i].c;
        if(c == mesaj[n] && !uz[new_nod][n])
        {
            uz[new_nod][n] = 1;
            DFS(new_nod, n + 1);
        }
    }
    
}

void Solve()
{
    ans = false;
    string t;
    memset(uz, 0, sizeof uz);
    DFS(BG, 0);
    out << ans << "\n";
}

void Read_Data()
{
    in >> N >> M >> K;
    in >> BG;
    for(int i = 1; i <= K; i++)
    {
        int x; in >> x;
        ND[x] = 1;
    }
    for(int i = 1; i <= M; i++)
    {
        int x, y; char c; in >> x >> y >> c;
        muchii[x].push_back({y, c});
    }
    in >> Q;
    while(Q--)
    {
        in >> mesaj;
        Solve();
    }
}

int main()
{
    Read_Data();
    out.close();
    return 0;
}