请大佬们指出本蒟蒻的错误或者提供更优的算法!
#include<bits/stdc++.h>
using namespace std;
const int N = 5e3 + 5;
int n, k, p, r, cnt, in[N], a[N][N], f[N], b[N], h[N], c;
bool vis[N], t[N];
int main () {
scanf("%d%d%d", &n, &k, &p);
for(int i = 1;i <= p;++i) scanf("%d", f+i), vis[f[i]] = true;
scanf("%d", &r);
for(int i = 1;i <= r;++i) {
scanf("%d%d", b+i, in+i);
vis[b[i]] = true;
for(int j = 1;j <= in[i];++j) scanf("%d", &a[i][j]);
}
if(vis[k] == false) puts("-1"), exit(0);
fill(vis+1, vis+n+1, false);
for(int i = 1;i <= p;++i) vis[f[i]] = true;
while(vis[k] == false) {
++cnt;
c = 0;
bool flag = false;
for(int i = 1;i <= r;++i) {
if(t[i]) continue;
flag = true;
for(int j = 1;j <= in[i];++j)
if(!vis[a[i][j]]) {flag = false; break;}
if(flag) h[++c] = b[i], t[i] = true;
}
for(int i = 1;i <= c;++i) vis[h[i]] = true;
if(!c) puts("-1"), exit(0);
}
printf("%d\n", cnt);
return 0;
}