10675 2024. 04. 07 21:16:33 999 Nagysebességű vasút cpp17 Időlimit túllépés 0/100 2.099s 30220 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;
	q.push({0,0});
	while(!q.empty()){
		auto[c,a]=q.top();
		q.pop();
		c*=-1;
		if(c>disS[a])continue;
		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});
	disE[n-1]=0;
	while(!q.empty()){
		auto[c,a]=q.top();
		q.pop();
		c*=-1;
		if(c>disE[a])continue;
		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});
				os[b]=a;
			}
		}
	}
	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 2024 KiB
subtask2 0/35
3 Időlimit túllépés 2.099s 2452 KiB
4 Időlimit túllépés 2.081s 2544 KiB
5 Hibás válasz 4ms 2656 KiB
6 Elfogadva 4ms 2692 KiB
7 Elfogadva 4ms 2904 KiB
8 Hibás válasz 4ms 2668 KiB
subtask3 0/30
9 Elfogadva 72ms 16100 KiB
10 Elfogadva 72ms 16056 KiB
11 Elfogadva 71ms 16252 KiB
12 Elfogadva 71ms 16252 KiB
13 Elfogadva 72ms 16320 KiB
14 Hibás válasz 75ms 16504 KiB
subtask4 0/35
15 Időlimit túllépés 2.069s 15832 KiB
16 Időlimit túllépés 2.053s 15820 KiB
17 Időlimit túllépés 2.046s 15776 KiB
18 Időlimit túllépés 2.082s 15964 KiB
19 Elfogadva 305ms 29884 KiB
20 Elfogadva 287ms 29884 KiB
21 Elfogadva 300ms 29840 KiB
22 Elfogadva 289ms 29852 KiB
23 Elfogadva 307ms 30220 KiB
24 Hibás válasz 145ms 21596 KiB
25 Elfogadva 71ms 17036 KiB
26 Elfogadva 72ms 17036 KiB
27 Hibás válasz 79ms 17368 KiB