有错误但是找不出来,整体代码思路没问题
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int N=1e6+10;
const int M=1e4+10;
const int Small=1e-8;
int n,m,k;
struct Node{
int to;
int next;
int a;
}e[N];
int head[N];
int pd[M][M];
long long dp[M][M];
void dij(){
for(int i=0;i<=n;i++){
for(int kk=0;kk<=k;kk++){
dp[i][kk]=0x7fffffff;
}
}
int minn;
int minj=1;
dp[1][0]=0;
int K=0;
pd[minj][K]=true;
for(int i=1;i<=n;i++){
for(int j=head[minj];j;j=e[j].next){
if(dp[minj][K]>=e[j].a){
dp[e[j].to][(K+1)%k]=min(dp[e[j].to][(K+1)%k],dp[minj][K]+1);
}else{
int kkk=ceil((e[j].a-dp[minj][K])/(k+0.0));
dp[e[j].to][(K+1)%k]=min(dp[e[j].to][(K+1)%k],dp[minj][K]+kkk*k+1);
}
}
minn=0x7fffffff;
pd[minj][K]=true;
for(int j=1;j<=n;j++){
for(int kk=0;kk<k;kk++){
if(!pd[j][kk]){
if(dp[j][kk]<minn){
minn=dp[j][kk];
K=kk;
minj=j;
}
}
}
}
}
}
int main(){
cin>>n>>m>>k;
int cnt=0;
for(int i=1;i<=m;i++){
int u,v,a;
cin>>u>>v>>a;
e[++cnt].next=head[u];
head[u]=cnt;
e[cnt].to=v;
e[cnt].a=a;
}
dij();
if(dp[n][0]!=0x7fffffff) cout<<-1;
else cout<<dp[n][0];
return 0;
}