Pagini recente » Cod sursa (job #2063856) | Cod sursa (job #296049) | Cod sursa (job #992891) | Clasament conc | Cod sursa (job #2637714)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream fin("nfa.in");
ofstream fout("nfa.out");
const int DIM = 305;
int n,m,k,start,F[DIM],x,y,q,C[DIM][DIM],ans;
char c;
vector < pair <int,char> > G[DIM];
string Text;
void Read()
{
fin>>n>>m>>k;
fin>>start;
while(k--)
{
fin>>x;
F[x]=1;
}
while(m--)
{
fin>>x>>y>>c;
G[x].push_back(make_pair(y,c));
}
}
void DFS(int node, string Str, int pos)
{
if(pos==(Str.size()))
{
if(F[node])
{
ans=1;
return;
}
}
else
{
vector < pair <int,char> > ::iterator it;
for(it=G[node].begin();it!=G[node].end();it++)
{
int next=(*it).first;
char ch=(*it).second;
if(!C[next][pos] && ch==Str[pos])
{
C[next][pos]=1;
DFS(next,Str,pos+1);
}
}
}
}
void SolveEvent(string Str, int pos)
{
ans=0;
for(int i=1;i<=n;i++)
for(int j=0;j<=151;j++)
C[i][j]=0;
DFS(start,Str,pos);
fout<<ans<<'\n';
}
void Query()
{
fin>>q;
while(q--)
{
fin>>Text;
SolveEvent(Text,0);
}
}
int main()
{
Read();
Query();
}