Pagini recente » Cod sursa (job #2438795) | Cod sursa (job #1373073) | Cod sursa (job #1959339) | Cod sursa (job #447273) | Cod sursa (job #2588627)
#include <fstream>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
ifstream fin ("nfa.in");
ofstream fout("nfa.out");
int n, m, q0;
vector <pair <int, char> > G[100001];
bool f[100001];
char s[100001];
queue <int> Q;
bool DFS(int nod, int poz)
{
if(poz == strlen(s))
return f[nod];
int sol = 0;
for(int i = 0; i < G[nod].size(); ++i)
if(G[nod][i].second == s[poz])
if(DFS(G[nod][i].first, poz+1) == 1) sol = 1;
return sol;
}
void subp_b()
{
int q;
fin >> q;
while(q--)
{
fin >> s;
fin.get();
fout << DFS(q0, 0) << '\n';
}
}
/*void subp_c()
{
Q.push(q0);
while(!Q.empty())
{
int nod = Q.front();
for(int i = 0; i < G[nod].size(); ++i)
// if(G[nod][i])
}
}*/
int main()
{
int k;
fin >> n >> m >> k;
fin >> q0;
for(int i = 1, qf; i <= k; ++i)
{
fin >> qf;
f[qf] = 1;
}
for(int i = 1; i <= m; ++i)
{
int q1, q2;
char c;
fin >> q1 >> q2 >> c;
G[q1].push_back(make_pair(q2, c));
}
subp_b();
// subp_c();
return 0;
}