106762024-04-07 21:19:13999Nagysebességű vasútcpp17Időlimit túllépés 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva3ms2020 KiB
subtask20/35
3Időlimit túllépés2.099s2468 KiB
4Időlimit túllépés2.065s2968 KiB
5Elfogadva4ms3000 KiB
6Elfogadva4ms3196 KiB
7Elfogadva4ms3260 KiB
8Elfogadva4ms3428 KiB
subtask330/30
9Elfogadva71ms16572 KiB
10Elfogadva71ms16636 KiB
11Elfogadva71ms16636 KiB
12Elfogadva71ms16812 KiB
13Elfogadva72ms16708 KiB
14Elfogadva74ms16708 KiB
subtask40/35
15Időlimit túllépés2.073s16048 KiB
16Időlimit túllépés2.069s16136 KiB
17Időlimit túllépés2.065s16224 KiB
18Időlimit túllépés2.078s16212 KiB
19Elfogadva317ms29780 KiB
20Elfogadva305ms29912 KiB
21Elfogadva296ms29844 KiB
22Elfogadva321ms30084 KiB
23Elfogadva324ms29984 KiB
24Elfogadva143ms21596 KiB
25Elfogadva75ms16784 KiB
26Elfogadva71ms16780 KiB
27Elfogadva79ms17036 KiB