Cod sursa(job #2588106)

Utilizator lucametehauDart Monkey lucametehau Data 24 martie 2020 14:10:59
Problema NFA Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

ifstream cin ("nfa.in");
ofstream cout ("nfa.out");

int n, m, k, qr, start, x, y;
char c;

bool fin[305], inq[305];
string s;
vector <int> q, temp;
vector <pair <int, char>> g[305];

int main() {
  cin >> n >> m >> k >> start;
  for(int i = 1; i <= k; i++)
    cin >> x, fin[x] = 1;
  for(; m; m--) {
    cin >> x >> y >> c;
    g[x].push_back({y, c});
  }
  cin >> qr;
  for(; qr; qr--) {
    cin >> s;
    q.clear();
    q.push_back(start);
    for(int i = 1; i <= n; i++)
      inq[i] = 0;
    for(int i = 0; i < s.size(); i++) {
      temp = q;
      for(auto &nod : q)
        inq[nod] = 0;
      q.clear();
      for(auto &nod : temp) {
        for(auto &fiu : g[nod]) {
          if(fiu.second == s[i] && inq[fiu.first] == 0)
            q.push_back(fiu.first), inq[fiu.first] = 1;
        }
      }
    }
    bool ok = 0;
    for(auto &nod : q)
      ok |= fin[nod];
    cout << ok << "\n";
  }
  return 0;
}