∑si 为多少啊。。。
#include <bits/stdc++.h>
using namespace std;
const int N = 5e3 + 50;
int n, m, k, p, d[N], dist[N];
int q[N], front = 1, rear = 0;
vector <int> e[N];
void topo() {
while (front <= rear) {
int u = q[front++];
for (auto v : e[u]) {
dist[v] = max(dist[v], dist[u] + 1);
if (!--d[v]) q[++rear] = v;
}
}
}
int main() {
memset(dist, 255, sizeof(dist));
scanf("%d%d%d", &n, &k, &p);
for (int i = 1; i <= p; i++) {
int x;
scanf("%d", &x);
q[++rear] = x;
dist[i] = 0;
}
scanf("%d", &m);
for (int i = 1; i <= m; i++) {
int x, c;
scanf("%d%d", &x, &c);
if (!dist[x]) continue;
d[x] = c;
while (c--) {
int y;
scanf("%d", &y);
e[y].push_back(x);
}
}
topo();
printf("%d\n", dist[k]);
return 0;
}