记录编号 607309 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 3930.[CSP 2023J]旅游巴士 最终得分 100
用户昵称 Gravatar金牌教师王艳芳 是否通过 通过
代码语言 C++ 运行时间 0.865 s
提交时间 2025-10-09 23:33:27 内存使用 7.19 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int main(){
    freopen("bus.in","r",stdin);
    freopen("bus.out","w",stdout);
    int n,m,k;
    cin>>n>>m>>k;
    int u[20005],v[20005],a[20005];
    vector<int> g[10005];
    for(int i=0;i<m;i++){
        cin>>u[i]>>v[i]>>a[i];
        g[u[i]].push_back(i);
    }
    int d[10005][105];
    for(int i=1;i<=n;i++)for(int j=0;j<k;j++)d[i][j]=1000000000;
    d[1][0]=0;
    queue<pair<int,int>> q;
    q.push(make_pair(1,0));
    while(!q.empty()){
        int cu=q.front().first,cr=q.front().second;
        q.pop();
        for(int i=0;i<g[cu].size();i++){
            int e=g[cu][i],nv=v[e],na=a[e],ct=d[cu][cr];
            int nt=ct;
            if(nt<na){
                int x=(na-nt+k-1)/k;
                nt+=x*k;
            }
            nt++;
            int nr=(cr+1)%k;
            if(nt<d[nv][nr]){
                d[nv][nr]=nt;
                q.push(make_pair(nv,nr));
            }
        }
    }
    if(d[n][0]==1000000000)cout<<-1<<endl;
    else cout<<d[n][0]<<endl;
    return 0;
}