10679 2024. 04. 07 21:26:19 999 Nagysebességű vasút cpp17 Időlimit túllépés 30/100 2.098s 30888 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});
	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 1700 KiB
2 Elfogadva 3ms 1932 KiB
subtask2 0/35
3 Időlimit túllépés 2.098s 2360 KiB
4 Időlimit túllépés 2.072s 2384 KiB
5 Elfogadva 4ms 2248 KiB
6 Elfogadva 4ms 2560 KiB
7 Elfogadva 4ms 2604 KiB
8 Elfogadva 4ms 2736 KiB
subtask3 30/30
9 Elfogadva 78ms 15876 KiB
10 Elfogadva 74ms 16136 KiB
11 Elfogadva 75ms 16432 KiB
12 Elfogadva 74ms 16396 KiB
13 Elfogadva 71ms 16344 KiB
14 Elfogadva 75ms 16556 KiB
subtask4 0/35
15 Időlimit túllépés 2.053s 16076 KiB
16 Időlimit túllépés 2.065s 16368 KiB
17 Időlimit túllépés 2.065s 16452 KiB
18 Időlimit túllépés 2.059s 16484 KiB
19 Elfogadva 287ms 30284 KiB
20 Elfogadva 307ms 30580 KiB
21 Elfogadva 316ms 30532 KiB
22 Elfogadva 289ms 30540 KiB
23 Elfogadva 287ms 30888 KiB
24 Elfogadva 143ms 22136 KiB
25 Elfogadva 72ms 17560 KiB
26 Elfogadva 75ms 17604 KiB
27 Elfogadva 75ms 17644 KiB