Pagini recente » Cod sursa (job #74897) | Cod sursa (job #452819) | Cod sursa (job #2687338) | Cod sursa (job #372063) | Cod sursa (job #2627865)
#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;
}