Pagini recente » Cod sursa (job #88485) | Cod sursa (job #1439207) | Cod sursa (job #1797520) | Cod sursa (job #2889800) | Cod sursa (job #2583237)
#include <bits/stdc++.h>
using namespace std;
using Bitset = bitset<512>;
int main() {
ifstream cin("nfa.in");
ofstream cout("nfa.out");
int n, m, k; cin >> n >> m >> k;
assert(1 <= n && n <= 300);
assert(1 <= m && m <= 1200);
assert(1 <= k && k <= n);
vector<vector<Bitset>> graph(n, vector<Bitset>(26));
Bitset fini;
int x; cin >> x; --x;
assert(0 <= x && x < n);
while (k--) {
int x; cin >> x; --x;
assert(0 <= x && x < n);
fini[x] = true;
}
for (int i = 0; i < m; ++i) {
int a, b; char c; cin >> a >> b >> c;
--a; --b;
assert(0 <= a && a < n);
assert(0 <= b && b < n);
assert('a' <= c && c <= 'z');
graph[a][c - 'a'][b] = true;
}
int q; cin >> q;
assert(1 <= q && q <= 100);
while (q--) {
string s; cin >> s;
assert(1 <= s.size() && s.size() <= 50);
Bitset now; now[x] = true;
for (auto c : s) {
Bitset nxt;
assert('a' <= c && c <= 'z');
for (int i = 0; i < n; ++i)
if (now[i]) nxt |= graph[i][c - 'a'];
swap(now, nxt);
}
now &= fini;
bool ok = false;
for (int i = 0; i < n; ++i)
if (now[i]) ok = true;
cout << ok << '\n';
}
return 0;
}