Cod sursa(job #2891344)

Utilizator RobertuRobert Udrea Robertu Data 18 aprilie 2022 11:49:37
Problema NFA Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstring>
#define dim 1500
using namespace std;

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

int stariFin[dim];
int folosit[dim][dim];

struct Muchie {
    int vecin;
    char lit;
};
vector< vector< pair<int, int> > > v(dim);

int n, ok;

void Verificare(string cuvant, int start, int index) {
    if(cuvant.length() == index) {
            if( stariFin[start] ) {
                ok = 1;
                return;
            }
        } else { 
        for(int i = 0; i < v[start].size(); i++) 
            if( v[start][i].second == cuvant[index] && !folosit[ v[start][i].first ][index] ) {
                folosit[ v[start][i].first ][index] = 1;
                Verificare(cuvant, v[start][i].first, index + 1);
            }
    }
}

int main() {
    int m, x, y, S, nrF, nrCuv;
    char l;
    int stare;
    string cuvant;

    fin >> n >> m >> nrF >> S;

    for(int i = 0; i < nrF; i++) {
        fin >> stare;
        stariFin[stare] = 1;
    }

    // Muchie tranzitie;
    for(int i = 0; i < m; i++) {
        fin >> x >> y >> l;

        v[x].push_back(make_pair(y, l));
    }

    fin >> nrCuv;
    for(int i = 0; i < nrCuv; i++) {
        fin >> cuvant;
        ok = 0;
        memset(folosit, 0, sizeof(folosit));
        Verificare(cuvant, S, 0);
        fout << ok << '\n';
    }

    return 0;
}