106812024-04-07 21:38:55999Nagysebességű vasútcpp17Időlimit túllépés 30/1002.075s31084 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});
	while(!q.empty()){
		auto [d,a]=q.top();
		q.pop();
		if(d>disS[a])continue;
		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()){
		auto [d,a]=q.top();
		q.pop();
		if(d>disS[a])continue;
		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
1Elfogadva3ms1976 KiB
2Elfogadva3ms2216 KiB
subtask20/35
3Időlimit túllépés2.049s2552 KiB
4Időlimit túllépés2.073s1900 KiB
5Hibás válasz4ms2568 KiB
6Hibás válasz4ms2860 KiB
7Elfogadva4ms2796 KiB
8Elfogadva4ms3056 KiB
subtask330/30
9Elfogadva74ms16496 KiB
10Elfogadva71ms16808 KiB
11Elfogadva72ms17024 KiB
12Elfogadva71ms17140 KiB
13Elfogadva79ms17104 KiB
14Elfogadva72ms17188 KiB
subtask40/35
15Időlimit túllépés2.058s16604 KiB
16Időlimit túllépés2.058s16540 KiB
17Időlimit túllépés2.066s16488 KiB
18Időlimit túllépés2.075s16424 KiB
19Elfogadva284ms30616 KiB
20Elfogadva296ms30576 KiB
21Hibás válasz291ms30724 KiB
22Elfogadva287ms30696 KiB
23Elfogadva303ms31084 KiB
24Elfogadva138ms22480 KiB
25Elfogadva74ms18176 KiB
26Elfogadva75ms18152 KiB
27Elfogadva74ms18076 KiB