RT 似乎错的点都是输出 0 的
# include<cstdio>
# include<iostream>
# include<queue>
# include<vector>
# include<cstring>
# define V G[tmp][i].v
# define W G[tmp][i].w
using namespace std;
const int N = 5e3 + 5;
int n, m, t, u, v, w, ans, f[N][N], pre[N][N], in[N];
struct Edge {
int v, w;
} ;
vector<Edge> G[N];
void add(int u, int v, int w) {
G[u].push_back((Edge){v, w});
in[v]++;
}
void dfs(int tmp, int num) {
if(num == 0) return ;
dfs(pre[tmp][num], num - 1);
cout << tmp << " ";
}
signed main() {
scanf("%d%d%d", &n, &m, &t);
int i, j;
for(i = 1; i <= n; i++) {
scanf("%d%d%d", &u, &v, &w);
add(u, v, w);
}
queue<int> q;
memset(f, 0x3f, sizeof f);
f[1][1] = 0;
for(i = 1; i <= n; i++)
if(!in[i]) q.push(i);
while(!q.empty()) {
int tmp = q.front(); q.pop();
for(i = 0; i < G[tmp].size(); i++) {
if(!--in[G[tmp][i].v]) q.push(G[tmp][i].v);
for(j = 2; j <= n; j++)
if(f[tmp][j - 1] + W < f[V][j]) {
f[V][j] = f[tmp][j - 1] + W;
pre[V][j] = tmp;
}
}
}
for(i = n; i >= 1; i--)
if(f[n][i] <= t) {
ans = i;
break;
}
cout << ans << endl;
dfs(n, ans);
return 0;
}