求助(玄关)
查看原帖
求助(玄关)
1032960
Danny_chan楼主2024/9/22 16:20

第二十一个测试点错了,

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k;
vector<pair<int,int>>a[10010];
int d[10010][110];
void dj(){
	memset(d,0x3f,sizeof(d));
	priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q;
	q.push({1,0});
	while(!q.empty()){
		auto t=q.top();
		q.pop();
		int t1=t.first;
		int t2=t.second;
		if(d[t1][t2%k]<t2) continue;
		for(int i=0;i<a[t1].size();i++){
			int j=a[t1][i].first;
			int s=t.second;
			if(s+1<a[t1][i].second){
				s+=(a[t1][i].second-t2-1+k)/k*k;
			}
			if(s+1<d[j][(s+1)%k]){
				d[j][(s+1)%k]=s+1;
				q.push({j,s+1});
			}
		}
	}
}
signed main(){
	cin>>n>>m>>k;
	while(m--){
		int x,y,z;
		cin>>x>>y>>z;
		a[x].push_back({y,z});
	}
	dj();
	if(d[n][0]>=0x3f3f3f3f3f3f3f3f){
		cout<<"-1";
	}
	else cout<<d[n][0];
	return 0;
}
2024/9/22 16:20
加载中...