10660 2024. 04. 07 19:13:52 999 Nagysebességű vasút cpp17 Időlimit túllépés 0/100 2.081s 1047944 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);
	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});
			}
		}
	}
	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});
			}
		}
	}
	vector<vector<bool>> shortest(n,vector<bool>(n));
	int node=n-1;
	while(node!=0){
		int minv=INT_MAX,mindex;
		for(auto u:v[node]){
			int a=u.first;
			if(disS[a]<minv){
				mindex=a;
				minv=disS[a];
			}
		}
		shortest[node][mindex]=true;
		node=mindex;
	}
	
	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&&!shortest[a][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&&!shortest[a][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 2008 KiB
subtask2 0/35
3 Időlimit túllépés 2.061s 1760 KiB
4 Időlimit túllépés 2.081s 1984 KiB
5 Elfogadva 4ms 2876 KiB
6 Elfogadva 4ms 3212 KiB
7 Elfogadva 4ms 2968 KiB
8 Hibás válasz 4ms 3136 KiB
subtask3 0/30
9 Futási hiba 483ms 1047944 KiB
10 Futási hiba 470ms 1047700 KiB
11 Futási hiba 569ms 1047676 KiB
12 Futási hiba 472ms 1047656 KiB
13 Futási hiba 469ms 1047412 KiB
14 Futási hiba 476ms 1047200 KiB
subtask4 0/35
15 Futási hiba 822ms 1046964 KiB
16 Futási hiba 822ms 1046956 KiB
17 Futási hiba 822ms 1046976 KiB
18 Futási hiba 822ms 1046952 KiB
19 Futási hiba 815ms 1046948 KiB
20 Futási hiba 815ms 1046944 KiB
21 Futási hiba 819ms 1046944 KiB
22 Futási hiba 816ms 1046948 KiB
23 Futási hiba 819ms 1046948 KiB
24 Futási hiba 596ms 1046952 KiB
25 Futási hiba 479ms 1046952 KiB
26 Futási hiba 472ms 1046944 KiB
27 Futási hiba 474ms 1046948 KiB