106792024-04-07 21:26:19999Nagysebességű vasútcpp17Time limit exceeded 30/1002.098s30888 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>,vector<pair<int,int>>,greater<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
1Accepted3ms1700 KiB
2Accepted3ms1932 KiB
subtask20/35
3Time limit exceeded2.098s2360 KiB
4Time limit exceeded2.072s2384 KiB
5Accepted4ms2248 KiB
6Accepted4ms2560 KiB
7Accepted4ms2604 KiB
8Accepted4ms2736 KiB
subtask330/30
9Accepted78ms15876 KiB
10Accepted74ms16136 KiB
11Accepted75ms16432 KiB
12Accepted74ms16396 KiB
13Accepted71ms16344 KiB
14Accepted75ms16556 KiB
subtask40/35
15Time limit exceeded2.053s16076 KiB
16Time limit exceeded2.065s16368 KiB
17Time limit exceeded2.065s16452 KiB
18Time limit exceeded2.059s16484 KiB
19Accepted287ms30284 KiB
20Accepted307ms30580 KiB
21Accepted316ms30532 KiB
22Accepted289ms30540 KiB
23Accepted287ms30888 KiB
24Accepted143ms22136 KiB
25Accepted72ms17560 KiB
26Accepted75ms17604 KiB
27Accepted75ms17644 KiB