10683 2024. 04. 07 21:43:13 999 Nagysebességű vasút cpp17 Elfogadva 100/100 372ms 48500 KiB
// Source: https://usaco.guide/general/io

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

signed 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,LLONG_MAX),disE(n,LLONG_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;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1832 KiB
2 Elfogadva 3ms 2056 KiB
subtask2 35/35
3 Elfogadva 4ms 2680 KiB
4 Elfogadva 4ms 2768 KiB
5 Elfogadva 4ms 2816 KiB
6 Elfogadva 4ms 2952 KiB
7 Elfogadva 4ms 2972 KiB
8 Elfogadva 4ms 3084 KiB
subtask3 30/30
9 Elfogadva 93ms 23096 KiB
10 Elfogadva 92ms 23412 KiB
11 Elfogadva 86ms 23488 KiB
12 Elfogadva 93ms 23584 KiB
13 Elfogadva 94ms 23340 KiB
14 Elfogadva 97ms 23488 KiB
subtask4 35/35
15 Elfogadva 349ms 47880 KiB
16 Elfogadva 349ms 48024 KiB
17 Elfogadva 351ms 47884 KiB
18 Elfogadva 317ms 48264 KiB
19 Elfogadva 370ms 48084 KiB
20 Elfogadva 367ms 48500 KiB
21 Elfogadva 337ms 48412 KiB
22 Elfogadva 372ms 48344 KiB
23 Elfogadva 338ms 48484 KiB
24 Elfogadva 166ms 31204 KiB
25 Elfogadva 94ms 24348 KiB
26 Elfogadva 94ms 24572 KiB
27 Elfogadva 94ms 24648 KiB