10665 2024. 04. 07 19:30:24 999 Nagysebességű vasút cpp17 Időlimit túllépés 0/100 2.099s 30048 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]&&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 1828 KiB
2 Elfogadva 3ms 2020 KiB
subtask2 0/35
3 Időlimit túllépés 2.099s 2452 KiB
4 Időlimit túllépés 2.053s 2536 KiB
5 Elfogadva 4ms 2768 KiB
6 Elfogadva 4ms 3024 KiB
7 Elfogadva 4ms 3100 KiB
8 Hibás válasz 4ms 3316 KiB
subtask3 0/30
9 Elfogadva 79ms 16460 KiB
10 Elfogadva 76ms 16460 KiB
11 Elfogadva 78ms 16732 KiB
12 Elfogadva 78ms 16616 KiB
13 Elfogadva 76ms 16580 KiB
14 Hibás válasz 79ms 16472 KiB
subtask4 0/35
15 Időlimit túllépés 2.051s 16008 KiB
16 Időlimit túllépés 2.075s 16236 KiB
17 Időlimit túllépés 2.051s 16212 KiB
18 Időlimit túllépés 2.071s 16252 KiB
19 Elfogadva 321ms 29892 KiB
20 Elfogadva 324ms 29900 KiB
21 Elfogadva 314ms 29988 KiB
22 Elfogadva 324ms 29904 KiB
23 Elfogadva 323ms 30048 KiB
24 Hibás válasz 165ms 21560 KiB
25 Elfogadva 75ms 17076 KiB
26 Elfogadva 76ms 17136 KiB
27 Hibás válasz 79ms 17076 KiB