106762024-04-07 21:19:13999Nagysebességű vasútcpp17Time limit exceeded 30/1002.099s30084 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
#include <queue>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n,m;cin>>n>>m;
	vector<vector<pair<int,int>>> v(n);
	for(int i = 0;i<m;i++){
		int a,b,c;
		cin>>a>>b>>c;
		v[a].push_back({b,c});
		v[b].push_back({a,c});
	}
	vector<int> disS(n,INT_MAX),disE(n,INT_MAX),os(n,-1);
	priority_queue<pair<int, int>> q;
	disS[0]=0;
	disE[n-1]=0;
	q.push({0,0});
	vector<bool> proc1(n),proc2(n);
	while(!q.empty()){
		int a=q.top().second;
		q.pop();
		if(proc1[a])continue;
		proc1[a]=true;
		for(auto u:v[a]){
			int b=u.first,w=u.second;
			if(disS[b]>disS[a]+w){
				disS[b]=disS[a]+w;
				q.push({-disS[b],b});
				os[b]=a;
			}
		}
	}
	vector<bool> shortestPath(n);
    int curr = n-1;
    while (curr!=-1) {
        shortestPath[curr]=true;
        curr=os[curr];
    }
	q.push({0,n-1});
	while(!q.empty()){
		int a=q.top().second;
		q.pop();
		if(proc2[a])continue;
		proc2[a]=true;
		for(auto u:v[a]){
			int b=u.first,w=u.second;
			if(disE[b]>disE[a]+w){
				disE[b]=disE[a]+w;
				q.push({-disE[b],b});
			}
		}
	}
	int ans=INT_MAX;
	for(int i = 0;i<n;i++){
		for(auto u : v[i]){
			int a=i,b=u.first,c=u.second;
			if(disS[a]+disE[b]+c>disS[n-1]){
				if(disS[a]+disE[b]+c-disS[n-1]+1<c&&!(shortestPath[a]&&shortestPath[b])){//cout<<a<<' '<<b<<endl;
					ans=min(ans,disS[a]+disE[b]+c-disS[n-1]+1);
				}
			}
			if(disS[b]+disE[a]+c>disS[n-1]){
				if(disS[b]+disE[a]+c-disS[n-1]+1<c&&!(shortestPath[a]&&shortestPath[b])){//cout<<a<<' '<<b<<endl;
					ans=min(ans,disS[b]+disE[a]+c-disS[n-1]+1);
				}
			}
		}
	}cout<<(ans==INT_MAX?-1:ans)<<endl;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms1828 KiB
2Accepted3ms2020 KiB
subtask20/35
3Time limit exceeded2.099s2468 KiB
4Time limit exceeded2.065s2968 KiB
5Accepted4ms3000 KiB
6Accepted4ms3196 KiB
7Accepted4ms3260 KiB
8Accepted4ms3428 KiB
subtask330/30
9Accepted71ms16572 KiB
10Accepted71ms16636 KiB
11Accepted71ms16636 KiB
12Accepted71ms16812 KiB
13Accepted72ms16708 KiB
14Accepted74ms16708 KiB
subtask40/35
15Time limit exceeded2.073s16048 KiB
16Time limit exceeded2.069s16136 KiB
17Time limit exceeded2.065s16224 KiB
18Time limit exceeded2.078s16212 KiB
19Accepted317ms29780 KiB
20Accepted305ms29912 KiB
21Accepted296ms29844 KiB
22Accepted321ms30084 KiB
23Accepted324ms29984 KiB
24Accepted143ms21596 KiB
25Accepted75ms16784 KiB
26Accepted71ms16780 KiB
27Accepted79ms17036 KiB