106822024-04-07 21:40:38999Nagysebességű vasútcpp17Time limit exceeded 30/1002.073s30764 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;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms2100 KiB
2Accepted3ms2236 KiB
subtask20/35
3Time limit exceeded2.069s1724 KiB
4Time limit exceeded2.049s1836 KiB
5Wrong answer4ms2988 KiB
6Accepted4ms3204 KiB
7Accepted4ms3348 KiB
8Accepted4ms3372 KiB
subtask330/30
9Accepted74ms16772 KiB
10Accepted72ms16724 KiB
11Accepted74ms16688 KiB
12Accepted74ms16956 KiB
13Accepted74ms17272 KiB
14Accepted78ms17480 KiB
subtask40/35
15Time limit exceeded2.051s16760 KiB
16Time limit exceeded2.042s16536 KiB
17Time limit exceeded2.073s16700 KiB
18Time limit exceeded2.046s16888 KiB
19Accepted300ms30592 KiB
20Accepted303ms30732 KiB
21Accepted296ms30656 KiB
22Accepted301ms30664 KiB
23Accepted289ms30764 KiB
24Accepted144ms22144 KiB
25Accepted74ms17716 KiB
26Accepted72ms17788 KiB
27Accepted75ms17792 KiB