#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
const int MAXN = 501;
vector<int> H[MAXN];
bool contains(vector<int> &T, vector<int> &W) {
for (size_t i = 0; i < T.size(); i++) {
if (T.size() - i < W.size()) return false;
int j = 0;
while (j < W.size() && W[j] == T[i + j]) ++j;
if (j >= W.size()) return true;
}
return false;
}
vector<int> transform(vector<int> &B) {
vector<int> res;
for (auto x : B)
for (auto y : H[x])
res.push_back(y);
return res;
}
int main(int argc, char* argv[]) {
int n, m, l, h;
vector<int> S;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%d", &l);
while (l--) {
scanf("%d", &h);
H[i].push_back(h);
}
}
while (m--) {
scanf("%d", &h);
S.push_back(h);
}
vector<int> B;
B.push_back(1);
int d = 1;
while (B.size() < 100000) {
if (contains(B, S)) {
printf("%d\n", d);
return 0;
}
B = transform(B);
++d;
}
printf("-1\n");
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <iostream> #include <algorithm> #include <cstdio> #include <vector> using namespace std; const int MAXN = 501; vector<int> H[MAXN]; bool contains(vector<int> &T, vector<int> &W) { for (size_t i = 0; i < T.size(); i++) { if (T.size() - i < W.size()) return false; int j = 0; while (j < W.size() && W[j] == T[i + j]) ++j; if (j >= W.size()) return true; } return false; } vector<int> transform(vector<int> &B) { vector<int> res; for (auto x : B) for (auto y : H[x]) res.push_back(y); return res; } int main(int argc, char* argv[]) { int n, m, l, h; vector<int> S; scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { scanf("%d", &l); while (l--) { scanf("%d", &h); H[i].push_back(h); } } while (m--) { scanf("%d", &h); S.push_back(h); } vector<int> B; B.push_back(1); int d = 1; while (B.size() < 100000) { if (contains(B, S)) { printf("%d\n", d); return 0; } B = transform(B); ++d; } printf("-1\n"); return 0; } |
English