蒟蒻求助,思路没有问题
查看原帖
蒟蒻求助,思路没有问题
1330396
Sad_Fool楼主2024/6/27 13:52

但看不出来哪里错了

#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;
}
2024/6/27 13:52
加载中...