最后一直指向 0 ,怎么回事
#include<bits/stdc++.h>
using namespace std;
const int N=5e3+5;
struct node{
int x,w;
};
int l=1,r=0;
int dp[N][N],in[N],que[N],stk[N],tp=0;
int n,m,k,x,y,w;
int lst[N][N];
vector<node>c[N];
void tra(int x,int y,int w){
for(int i=2;i<=n;i++){
if (dp[x][i-1]+w>k)continue;
if(dp[y][i]>dp[x][i-1]+w){
dp[y][i]=dp[x][i-1]+w;
lst[y][i]=x;
}
}
}
signed main(){
cin>>n>>m>>k;
for(int i=1;i<=m;i++){
cin>>x>>y>>w;
if(x!=y){
c[x].push_back((node){y,w});
in[y]++;
}
}
memset(dp,0x7f,sizeof(dp));
for(int i=1;i<=n;i++)
if(in[i]==0)
que[++r]=i;
while(l<=r){
int cur=que[l];
if(cur==0)
continue;
if(cur==1)
dp[1][1]=0;
for(int i=0;i<c[cur].size();i++){
int nxt=c[cur][i].x,w=c[cur][i].w;
tra(cur,nxt,w);
in[nxt]--;
if(in[nxt]==0)
que[++r]=nxt;
}
l++;
}
int ans=0,cur=n;
for(int i=1;i<=n;i++)
if(dp[n][i]<=k)
ans=max(ans,i);
cout<<ans<<'\n';
while(ans!=0){
stk[++tp]=cur;
cur=lst[cur][ans];
ans--;
}
while(tp)
cout<<stk[tp--]<<' ';
return 0;
}
/*
*/