为什么会 MLE?
  • 板块CF721C Journey
  • 楼主rainygame
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/3 12:52
  • 上次更新2024/3/3 13:03:00
查看原帖
为什么会 MLE?
804607
rainygame楼主2024/3/3 12:52

感觉空间没有问题呀。Luogu IDE 上也可过。

#include <bits/stdc++.h>
using namespace std;
#define MAXN 5001

int n, m, k;
int in[MAXN];
int f[MAXN][MAXN];
bitset<MAXN> vis;

pair<int, int> g[MAXN][MAXN];
list<pair<int, int>> e[MAXN];

void dfs(int x){
    vis.set(x);
    for (auto i: e[x]) dfs(i.first);
}

void toposort(){
    queue<int, list<int>> que;
    que.push(1);

    while (!que.empty()){
        int u(que.front());
        que.pop();
        for (auto i: e[u]){
            int v(i.first);
            for (int j(1); j<n; ++j){
                if (f[v][j+1] > f[u][j]+i.second){
                    f[v][j+1] = f[u][j]+i.second;
                    g[v][j+1] = {u, j};
                }
            }
            if (!(--in[v])) que.push(v);
        }
    }
}

void print(int x, int y){
    if (!x) return;
    print(g[x][y].first, g[x][y].second);
    cout << x << ' ';
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> m >> k;
    for (int u, v, w; m; --m){
        cin >> u >> v >> w;
        e[u].push_back({v, w});
        ++in[v];
    }

    for (int i(1); i<=n; ++i){
        for (int j(1); j<=n; ++j) f[i][j] = k+1;
    }
    f[1][1] = 0;
    dfs(1);
    for (int i(1); i<=n; ++i){
        if (!vis.test(i)){
            for (auto j: e[i]) --in[j.first];
        }
    }
    toposort();

    for (int i(n); i>=1; --i){
        if (f[n][i] <= k){
            cout << i << '\n';
            print(n, i);
            return 0;
        }
    }

    return 0;
}

2024/3/3 12:52
加载中...