Pagini recente » Cod sursa (job #254712) | Cod sursa (job #2703014) | Cod sursa (job #569245) | Cod sursa (job #2846014) | Cod sursa (job #2591209)
#include <bits/stdc++.h>
using namespace std;
ifstream f("nfa.in");
ofstream g("nfa.out");
const int SIGMA=26;
const int NMAX=305;
int n,k,x,y,m,start,q;
char c;
bool stari_finale[NMAX];
vector <int> tranzitii[NMAX][SIGMA];
bool nfa(string s)
{
unordered_set <int> current;
current.insert(start);
for(int i=0;i<(int)s.size();i++)
{
unordered_set <int> next;
int lit=s[i]-'a';
for(auto it:current)
{
for(int j=0;j<(int)tranzitii[it][lit].size();j++)
next.insert(tranzitii[it][lit][j]);
}
current=next;
}
for(auto it:current)
{
if(stari_finale[it])
return 1;
}
return 0;
}
int main()
{
f>>n>>m>>k;
f>>start;
for(int i=1;i<=k;i++)
{
f>>x;
stari_finale[x]=1;
}
while(m--)
{
f>>x>>y>>c;
tranzitii[x][c-'a'].push_back(y);
}
f>>q;
while(q--)
{
string cuv;
f>>cuv;
g<<nfa(cuv)<<"\n";
}
return 0;
}