106192024-04-06 22:36:36111Nagysebességű vasútcpp17Elfogadva 100/100361ms84432 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

#define INF (int)1e16

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N,M;
	cin>>N>>M;
	vector<vector<pair<int,int>>>g(N);
	vector<tuple<int,int,int>>e;
	for(int i=0;i<M;i++){
		int a,b,c;
		cin>>a>>b>>c;
		g[a].emplace_back(b,c);
		g[b].emplace_back(a,c);
		e.emplace_back(a,b,c);
		e.emplace_back(b,a,c);
	}
	priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q;
	vector<int>d0(N,INF),d1(N,INF),p(N,-1),v(N);
	d0[0]=0;
	q.emplace(0,0);
	while(!q.empty()){
		auto[d,i]=q.top();
		q.pop();
		if(d0[i]<d){
			continue;
		}
		for(auto[j,w]:g[i]){
			if(d0[i]+w<d0[j]){
				d0[j]=d0[i]+w;
				p[j]=i;
				q.emplace(d0[j],j);
			}
		}
	}
	for(int i=N-1;i>=0;i=p[i]){
		v[i]=1;
	}
	d1[N-1]=0;
	q.emplace(0,N-1);
	while(!q.empty()){
		auto[d,i]=q.top();
		q.pop();
		if(d1[i]<d){
			continue;
		}
		for(auto[j,w]:g[i]){
			if(d1[i]+w<d1[j]){
				d1[j]=d1[i]+w;
				q.emplace(d1[j],j);
			}
		}
	}
	int ans=INF-1;
	for(auto[a,b,c]:e){
		if(v[a]&&v[b]){
			continue;
		}
		int x=d0[N-1]-d0[a]-d1[b];
		if(x<=1){
			continue;
		}
		ans=min(ans,c-x+1);
	}
	cout<<(ans+1)%INF-1<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva3ms2060 KiB
subtask235/35
3Elfogadva4ms2916 KiB
4Elfogadva4ms3228 KiB
5Elfogadva4ms3272 KiB
6Elfogadva4ms3704 KiB
7Elfogadva4ms3604 KiB
8Elfogadva4ms3716 KiB
subtask330/30
9Elfogadva92ms33864 KiB
10Elfogadva96ms33960 KiB
11Elfogadva92ms33900 KiB
12Elfogadva93ms33896 KiB
13Elfogadva93ms33920 KiB
14Elfogadva92ms33916 KiB
subtask435/35
15Elfogadva345ms84192 KiB
16Elfogadva344ms84196 KiB
17Elfogadva344ms84344 KiB
18Elfogadva349ms84332 KiB
19Elfogadva354ms84432 KiB
20Elfogadva356ms84156 KiB
21Elfogadva361ms84132 KiB
22Elfogadva358ms84288 KiB
23Elfogadva360ms84144 KiB
24Elfogadva174ms50204 KiB
25Elfogadva92ms34096 KiB
26Elfogadva93ms34112 KiB
27Elfogadva90ms34100 KiB