106652024-04-07 19:30:24999Nagysebességű vasútcpp17Időlimit túllépés 0/1002.099s30048 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]&&disS[n-1]==c+disS[a]+disE[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]&&disS[n-1]==c+disE[a]+disS[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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva3ms2020 KiB
subtask20/35
3Időlimit túllépés2.099s2452 KiB
4Időlimit túllépés2.053s2536 KiB
5Elfogadva4ms2768 KiB
6Elfogadva4ms3024 KiB
7Elfogadva4ms3100 KiB
8Hibás válasz4ms3316 KiB
subtask30/30
9Elfogadva79ms16460 KiB
10Elfogadva76ms16460 KiB
11Elfogadva78ms16732 KiB
12Elfogadva78ms16616 KiB
13Elfogadva76ms16580 KiB
14Hibás válasz79ms16472 KiB
subtask40/35
15Időlimit túllépés2.051s16008 KiB
16Időlimit túllépés2.075s16236 KiB
17Időlimit túllépés2.051s16212 KiB
18Időlimit túllépés2.071s16252 KiB
19Elfogadva321ms29892 KiB
20Elfogadva324ms29900 KiB
21Elfogadva314ms29988 KiB
22Elfogadva324ms29904 KiB
23Elfogadva323ms30048 KiB
24Hibás válasz165ms21560 KiB
25Elfogadva75ms17076 KiB
26Elfogadva76ms17136 KiB
27Hibás válasz79ms17076 KiB