感觉空间没有问题呀。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;
}