但看不出来哪里错了
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
bool vis[maxn], flag[maxn][maxn];
int f[maxn], in[maxn], a[maxn], n, m;
vector <int> e[maxn];
queue <int> q;
void tp() {
for (int i = 1; i <= n; i++)
if (!vis[i]) q.push(i), f[i] = 1;
while (q.size()) {
int p = q.front();
for (int i = 0; i < e[p].size(); i++) {
int to = p;
f[to] = max(f[to], f[p] + 1);
if (--in[to] == 0) {
q.push(to);
}
}
q.pop();
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int s;
cin >> s;
for (int j = 1; j <= s; j++) {
cin >> a[j];
vis[a[j]] = 1; // 停靠站点
}
for (int j = a[1]; j <= a[s]; j++) {
if (!vis[j]) // 不是站点
for (int k = 1; k <= s; k++)
if (!flag[a[k]][j]) { // 没有连边
e[k].push_back(j); // 站点向非站点连边
flag[a[k]][j] = 1;
in[j]++;
}
}
}
tp();
int ans = 0;
for (int i = 1; i <= n; i++) ans = max(ans, f[i]);
cout << ans;
}