如题,算法为优先队列优化的dijkstra,按理来说复杂度没有问题,求调。输入输出和memset均替换过,也不行。
#include<bits/stdc++.h>
using namespace std;
struct sb{
int v,w;
friend bool operator<(sb x,sb y){
return x.v>y.v;
}
};
int n,m,k,a,b,c,dp[11451][114],u,t,d,l;
vector<sb>s[11451];
priority_queue<sb>q;
sb p;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
for(int j=0;j<k;j++){
dp[i][j]=0x3f3f3f3f;
}
}
dp[1][0]=0;
for(int i=1;i<=m;i++){
cin>>a>>b>>c;
s[a].push_back(sb{b,c});
}
q.push(sb{1,0});
while(!q.empty()){
u=q.top().v;
t=q.top().w;
q.pop();
for(int i=0;i<s[u].size();i++){
p=s[u][i];
d=ceil(1.0*(max(p.w,t)-t)/k)*k+t+1;
if(d<=dp[p.v][d%k]){
dp[p.v][d%k]=d;
q.push(sb{p.v,d});
}
}
}
if(dp[n][0]==0x3f3f3f3f){
cout<<-1;
}
else{
cout<<dp[n][0];
}
return 0;
}