10663 2024. 04. 07 19:25:35 999 Nagysebességű vasút cpp17 Időlimit túllépés 0/100 2.099s 29720 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1812 KiB
2 Elfogadva 3ms 2056 KiB
subtask2 0/35
3 Időlimit túllépés 2.099s 1680 KiB
4 Időlimit túllépés 2.052s 2516 KiB
5 Elfogadva 4ms 2732 KiB
6 Elfogadva 4ms 2808 KiB
7 Elfogadva 4ms 2708 KiB
8 Hibás válasz 4ms 2972 KiB
subtask3 0/30
9 Elfogadva 128ms 15872 KiB
10 Elfogadva 128ms 16188 KiB
11 Elfogadva 128ms 16396 KiB
12 Elfogadva 128ms 16296 KiB
13 Elfogadva 146ms 16292 KiB
14 Hibás válasz 134ms 16304 KiB
subtask4 0/35
15 Időlimit túllépés 2.062s 16000 KiB
16 Időlimit túllépés 2.073s 15924 KiB
17 Időlimit túllépés 2.082s 15944 KiB
18 Időlimit túllépés 2.073s 15940 KiB
19 Elfogadva 493ms 29720 KiB
20 Elfogadva 495ms 29640 KiB
21 Elfogadva 485ms 29636 KiB
22 Elfogadva 481ms 29636 KiB
23 Elfogadva 490ms 29644 KiB
24 Hibás válasz 248ms 21024 KiB
25 Elfogadva 130ms 16576 KiB
26 Elfogadva 128ms 16528 KiB
27 Hibás válasz 133ms 16596 KiB