10676 2024. 04. 07 21:19:13 999 Nagysebességű vasút cpp17 Időlimit túllépés 30/100 2.099s 30084 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])){//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 1828 KiB
2 Elfogadva 3ms 2020 KiB
subtask2 0/35
3 Időlimit túllépés 2.099s 2468 KiB
4 Időlimit túllépés 2.065s 2968 KiB
5 Elfogadva 4ms 3000 KiB
6 Elfogadva 4ms 3196 KiB
7 Elfogadva 4ms 3260 KiB
8 Elfogadva 4ms 3428 KiB
subtask3 30/30
9 Elfogadva 71ms 16572 KiB
10 Elfogadva 71ms 16636 KiB
11 Elfogadva 71ms 16636 KiB
12 Elfogadva 71ms 16812 KiB
13 Elfogadva 72ms 16708 KiB
14 Elfogadva 74ms 16708 KiB
subtask4 0/35
15 Időlimit túllépés 2.073s 16048 KiB
16 Időlimit túllépés 2.069s 16136 KiB
17 Időlimit túllépés 2.065s 16224 KiB
18 Időlimit túllépés 2.078s 16212 KiB
19 Elfogadva 317ms 29780 KiB
20 Elfogadva 305ms 29912 KiB
21 Elfogadva 296ms 29844 KiB
22 Elfogadva 321ms 30084 KiB
23 Elfogadva 324ms 29984 KiB
24 Elfogadva 143ms 21596 KiB
25 Elfogadva 75ms 16784 KiB
26 Elfogadva 71ms 16780 KiB
27 Elfogadva 79ms 17036 KiB