106542024-04-07 18:58:15999Nagysebességű vasútcpp17Hibás válasz 0/100564ms29864 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;
		proc1[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){//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[a]+disE[b]+c-disS[n-1]+1<c){//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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1812 KiB
2Hibás válasz3ms2056 KiB
subtask20/35
3Hibás válasz4ms2536 KiB
4Hibás válasz4ms2752 KiB
5Hibás válasz4ms2892 KiB
6Hibás válasz4ms3356 KiB
7Hibás válasz4ms3164 KiB
8Hibás válasz4ms3168 KiB
subtask30/30
9Hibás válasz130ms15420 KiB
10Hibás válasz128ms15532 KiB
11Hibás válasz128ms15748 KiB
12Hibás válasz127ms15828 KiB
13Hibás válasz128ms15916 KiB
14Hibás válasz133ms15960 KiB
subtask40/35
15Hibás válasz564ms29556 KiB
16Hibás válasz537ms29400 KiB
17Hibás válasz550ms29356 KiB
18Hibás válasz529ms29656 KiB
19Hibás válasz505ms29624 KiB
20Hibás válasz518ms29624 KiB
21Hibás válasz495ms29532 KiB
22Hibás válasz514ms29784 KiB
23Hibás válasz508ms29864 KiB
24Hibás válasz261ms20964 KiB
25Hibás válasz129ms16720 KiB
26Hibás válasz128ms16924 KiB
27Hibás válasz133ms16844 KiB