#include<bits/stdc++.h>
using namespace std;
struct ff
{
int to,w,next,pass;
}way[40010];
int n,m,k,u[40010],v[40010],a[40010],head[40010],waycount=0,ans[40010]={0};
int dij()
{
priority_queue< pair<int,int> , vector<pair<int,int> >, greater<pair<int,int> > >pq;//pair<点,时间>
pq.push(make_pair(1,0));
while(pq.size())
{
int fpot=pq.top().first,ftime=pq.top().second;
pq.pop();
if(ftime>ans[fpot])
continue;
ans[fpot]=ftime;
if(fpot==n && ans[fpot]%k!=0)
ans[fpot]=2147483647;
for(int i=head[fpot];i!=-1;i=way[i].next)
{
int fto=way[i].to;
if(ans[fto]==2147483647)
{
if(way[i].pass<=ftime)
pq.push(make_pair(fto,ftime+way[i].w));
else
pq.push(make_pair(fto,way[i].pass+1+(k-(way[i].pass-ftime)%k)));
}
}
}
}
int add(int uu,int vv,int ww,int pa)
{
way[waycount].to=vv;
way[waycount].w=ww;
way[waycount].next=head[uu];
way[waycount].pass=pa;
head[uu]=waycount;
waycount++;
}
int main()
{
memset(head,-1,sizeof(head));
memset(ans,0x3f,sizeof(ans));
for(int i=0;i<=40001;i++)
ans[i]=2147483647;
cin>>n>>m>>k;
for(int i=0;i<m;i++)
{
cin>>u[i]>>v[i]>>a[i];
add(u[i],v[i],1,a[i]);
}
dij();
if(ans[n]==2147483647)
cout<<-1<<endl;
else
cout<<ans[n]<<endl;
return 0;
}
错误原因:
Runtime Error.
Received signal 6:
Aborted / IOT trap.