思路不想写啊~
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k,bj;
const int maxn=20005;
struct node
{
int id,s;
bool operator<(const node &y)const
{
return s>y.s;
}
};
vector<pair<int,int>>e[maxn];
priority_queue<node>q;
void spfa()
{
q.push(node{1,0});
while(q.size())
{
node head=q.top();
q.pop();
int u=head.id;
int s=head.s;
if(s>1000005)
{
break;
}
if(u==n&&s%k==0&&s!=0)
{
cout<<s;
bj=1;
return ;
}
for(int i=0;i<e[u].size();i++)
{
int v=e[u][i].first;
int t=e[u][i].second;
int ss=s;
if(t>s)
{
ss=s+1+(t-s+k-1)/k*k;
}
else
{
ss=s+1;
}
q.push(node{v,ss});
}
}
}
signed main()
{
cin>>n>>m>>k;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
e[x].push_back(make_pair(y,z));
}
spfa();
if(bj==0)
{
cout<<-1;
return 0;
}
return 0;
}