85分求调
查看原帖
85分求调
926412
xuxizhe0104楼主2023/11/18 07:37
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int maxn=1e4+10,inf=2e9;
struct T{
	int x,d;
	friend bool operator <(T x,T y){
		return x.d>y.d;
	}
};
int n,m,k;
int d[maxn][110];
vector<pair<int,int>> e[maxn];
void bfs(){
	priority_queue<T> q;
	q.push({1,0});
	d[1][0]=0;
	while(q.size()){
		T now=q.top();q.pop();
		for(int i=0;i<e[now.x].size();i++){
			pair<int,int> nxt=e[now.x][i];
			if(d[nxt.first][(now.d+1)%k]>now.d+1){
				d[nxt.first][(now.d+1)%k]=now.d+1;
				if(now.d>=nxt.second) q.push({nxt.first,now.d+1});
				else{
					int d=(nxt.second-now.d+k-1)/k*k;
					q.push({nxt.first,now.d+d+1});
				}
			}
		}
	}
}
int main(){
	cin.tie(0);cout.tie(0);
	cin>>n>>m>>k;
	for(int i=1;i<=m;i++){
		int u,v,a;cin>>u>>v>>a;
		e[u].push_back({v,a});
	}
	for(int i=1;i<=n;i++) for(int j=0;j<k;j++) d[i][j]=inf;
	bfs();
	if(d[n][0]==inf) d[n][0]=-1;
	cout<<d[n][0]<<endl;
	return 0;
}

2023/11/18 07:37
加载中...