106632024-04-07 19:25:35999Nagysebességű vasútcpp17Időlimit túllépés 0/1002.099s29720 KiB
// Source: https://usaco.guide/general/io

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

int main() {
	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
1Elfogadva3ms1812 KiB
2Elfogadva3ms2056 KiB
subtask20/35
3Időlimit túllépés2.099s1680 KiB
4Időlimit túllépés2.052s2516 KiB
5Elfogadva4ms2732 KiB
6Elfogadva4ms2808 KiB
7Elfogadva4ms2708 KiB
8Hibás válasz4ms2972 KiB
subtask30/30
9Elfogadva128ms15872 KiB
10Elfogadva128ms16188 KiB
11Elfogadva128ms16396 KiB
12Elfogadva128ms16296 KiB
13Elfogadva146ms16292 KiB
14Hibás válasz134ms16304 KiB
subtask40/35
15Időlimit túllépés2.062s16000 KiB
16Időlimit túllépés2.073s15924 KiB
17Időlimit túllépés2.082s15944 KiB
18Időlimit túllépés2.073s15940 KiB
19Elfogadva493ms29720 KiB
20Elfogadva495ms29640 KiB
21Elfogadva485ms29636 KiB
22Elfogadva481ms29636 KiB
23Elfogadva490ms29644 KiB
24Hibás válasz248ms21024 KiB
25Elfogadva130ms16576 KiB
26Elfogadva128ms16528 KiB
27Hibás válasz133ms16596 KiB