10682 2024. 04. 07 21:40:38 999 Nagysebességű vasút cpp17 Időlimit túllépés 30/100 2.073s 30764 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});
	while(!q.empty()){
		auto [d,a]=q.top();
		q.pop();
		if(d>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});
	while(!q.empty()){
		auto [d,a]=q.top();
		q.pop();
		if(d>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});
			}
		}
	}
	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])){
					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])){
					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 2100 KiB
2 Elfogadva 3ms 2236 KiB
subtask2 0/35
3 Időlimit túllépés 2.069s 1724 KiB
4 Időlimit túllépés 2.049s 1836 KiB
5 Hibás válasz 4ms 2988 KiB
6 Elfogadva 4ms 3204 KiB
7 Elfogadva 4ms 3348 KiB
8 Elfogadva 4ms 3372 KiB
subtask3 30/30
9 Elfogadva 74ms 16772 KiB
10 Elfogadva 72ms 16724 KiB
11 Elfogadva 74ms 16688 KiB
12 Elfogadva 74ms 16956 KiB
13 Elfogadva 74ms 17272 KiB
14 Elfogadva 78ms 17480 KiB
subtask4 0/35
15 Időlimit túllépés 2.051s 16760 KiB
16 Időlimit túllépés 2.042s 16536 KiB
17 Időlimit túllépés 2.073s 16700 KiB
18 Időlimit túllépés 2.046s 16888 KiB
19 Elfogadva 300ms 30592 KiB
20 Elfogadva 303ms 30732 KiB
21 Elfogadva 296ms 30656 KiB
22 Elfogadva 301ms 30664 KiB
23 Elfogadva 289ms 30764 KiB
24 Elfogadva 144ms 22144 KiB
25 Elfogadva 74ms 17716 KiB
26 Elfogadva 72ms 17788 KiB
27 Elfogadva 75ms 17792 KiB