10681 2024. 04. 07 21:38:55 999 Nagysebességű vasút cpp17 Időlimit túllépés 30/100 2.075s 31084 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1976 KiB
2 Elfogadva 3ms 2216 KiB
subtask2 0/35
3 Időlimit túllépés 2.049s 2552 KiB
4 Időlimit túllépés 2.073s 1900 KiB
5 Hibás válasz 4ms 2568 KiB
6 Hibás válasz 4ms 2860 KiB
7 Elfogadva 4ms 2796 KiB
8 Elfogadva 4ms 3056 KiB
subtask3 30/30
9 Elfogadva 74ms 16496 KiB
10 Elfogadva 71ms 16808 KiB
11 Elfogadva 72ms 17024 KiB
12 Elfogadva 71ms 17140 KiB
13 Elfogadva 79ms 17104 KiB
14 Elfogadva 72ms 17188 KiB
subtask4 0/35
15 Időlimit túllépés 2.058s 16604 KiB
16 Időlimit túllépés 2.058s 16540 KiB
17 Időlimit túllépés 2.066s 16488 KiB
18 Időlimit túllépés 2.075s 16424 KiB
19 Elfogadva 284ms 30616 KiB
20 Elfogadva 296ms 30576 KiB
21 Hibás válasz 291ms 30724 KiB
22 Elfogadva 287ms 30696 KiB
23 Elfogadva 303ms 31084 KiB
24 Elfogadva 138ms 22480 KiB
25 Elfogadva 74ms 18176 KiB
26 Elfogadva 75ms 18152 KiB
27 Elfogadva 74ms 18076 KiB