求助 程序只输出了两行两个 5000
#include<bits/stdc++.h>
using namespace std;
int n,m,T,ans;
const int maxn = 5010;
int c[maxn],fr[maxn][maxn];
int f[maxn][maxn];
struct link{int to,w;};
vector<link>l[maxn],b[maxn];
vector<int>d;
void topsort(){
queue<int>q;
for(int i=1;i<=n;i++)
if(c[i]==0)q.push(i);
while(!q.empty()){
int x=q.front();q.pop();
for(int i=0;i<l[x].size();i++){
int to=l[x][i].to;
for(int j=1;j<=n;j++){
if(f[to][j]>f[x][j-1]+l[x][i].w){
f[to][j]=f[x][j-1]+l[x][i].w;
fr[to][j]=x;
}
}
c[to]--;
if(c[to]==0)q.push(to);
}
}
}
void dfs(int x,int cur){
if(x<=0||x>n)return;
d.push_back(x);
if(x==1)return;
dfs(fr[x][cur],cur-1);
}
signed main(){
cin>>n>>m>>T;
for(int i=1,u,v,w;i<=m;i++){
cin>>u>>v>>w;
l[u].push_back({v,w});
c[v]++;
b[v].push_back({u,w});
}
memset(f,7,sizeof(f));
f[1][1]=0;
topsort();
for(int i=n;i>=1;i--){
if(f[n][i]<=T){
ans=i;
break;
}
}
cout<<ans<<endl;
dfs(n,ans);
for(int i=d.size()-1;i>=0;i--)
cout<<d[i]<<' ';
}