70pts求助,特殊性质#1#6#7#11-13没过
查看原帖
70pts求助,特殊性质#1#6#7#11-13没过
841638
Igunareo楼主2024/2/23 22:31
#include<bits/stdc++.h>
#define int long long
using namespace std;
priority_queue<pair<int,int> >q;
vector<pair<int,int> >x[10005];
int ans[10005][105];
signed main(){
	memset(ans,0x7f,sizeof(ans));
	int n,m,k;
	cin>>n>>m>>k;
	for(int i=1;i<=m;i++){
		int a,b,c;
		cin>>a>>b>>c;
		x[a].push_back(make_pair(b,c));
	}
	ans[1][0]=k;
	q.push(make_pair(-k,1));
	while(!q.empty()){
		int now=q.top().second;
		int summ=-q.top().first;
		q.pop();
		if(summ%k==0&&now==n){
			cout<<summ;
			return 0;
		}
		for(int i=0;i<x[now].size();i++){
			if(summ>=x[now][i].second&&summ+1<ans[x[now][i].first][(summ+1)%k]){
				ans[x[now][i].first][(summ+1)%k]=summ+1;
				q.push(make_pair(-(summ+1),x[now][i].first));
			}
			else if(summ<x[now][i].second){
				int got=x[now][i].second/k*k+summ%k;
				if(got<x[now][i].second)got+=k;
				if(got+1<ans[x[now][i].first][(got+1)%k]){
					ans[x[now][i].first][(got+1)%k]=got+1;
					q.push(make_pair(-(got+1),x[now][i].first));
				}
			}
		}
	}
	cout<<-1;
    return 0;
}
2024/2/23 22:31
加载中...