求助,0分
查看原帖
求助,0分
1706326
zcx_new楼主2025/6/15 17:05

子任务1正确,子任务2全错

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+1;
struct edge{
	int v,a;
};
vector<edge> g[N];
int dis[N][100],tme;
int n,m,k,u,v,a;
bool b[N][100];
priority_queue<pair<int,int>> pq;
void dijk(int sta){
	memset(dis,0x3f,sizeof dis);
	dis[sta][0]=0;
	pq.push(make_pair(0,sta));
	while(pq.size()){
		int x=pq.top().second;
		int len=-pq.top().first;
		pq.pop();
		if(!b[x][len%x]){
			b[x][len%x]=true;
			for(int i=0;i<g[x].size();i++){
				int tme=len;
				int y=g[x][i].v;
				int t=g[x][i].a;
				if(tme<t){
					if((t-tme)%k==0){
						tme=t;
					}else{
						tme+=((t-tme)/k+1)*k;
					}
				}
				if(tme+1<dis[y][(tme+1)%k]){
					dis[y][(tme+1)%k]=tme+1;
					pq.push(make_pair(-(tme+1),y));
				}
			}
		}
	}
}
signed main(){
	cin>>n>>m>>k;
	for(int i=1;i<=m;i++){
		cin>>u>>v>>a;
		g[u].push_back((edge){v,a});
	}
	dijk(1);
	int res=dis[n][0];
	if(res==0x3f3f3f3f){
		cout<<-1;
	}else{
		cout<<res;
	}
	return 0;
}
2025/6/15 17:05
加载中...