10678 2024. 04. 07 21:21:35 999 Nagysebességű vasút cpp17 Futási hiba 30/100 319ms 31304 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;
	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});
				os[b]=a;
			}
		}
	}
	vector<bool> shortestPath(n);
    int curr = n-1;
    for (int iter=0;curr!=-1;iter++) {
		if(iter>n)exit(1);
        shortestPath[curr]=true;
        curr=os[curr];
    }
	q.push({0,n-1});
	while(!q.empty()){
		int a=q.top().second;
		q.pop();
		if(proc2[a])continue;
		proc2[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&&!(shortestPath[a]&&shortestPath[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])){//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 1832 KiB
2 Elfogadva 3ms 2052 KiB
subtask2 0/35
3 Futási hiba 4ms 2508 KiB
4 Futási hiba 4ms 2764 KiB
5 Elfogadva 4ms 2636 KiB
6 Elfogadva 4ms 2908 KiB
7 Elfogadva 4ms 2980 KiB
8 Elfogadva 4ms 2972 KiB
subtask3 30/30
9 Elfogadva 75ms 16540 KiB
10 Elfogadva 75ms 16452 KiB
11 Elfogadva 76ms 16660 KiB
12 Elfogadva 75ms 16488 KiB
13 Elfogadva 75ms 16560 KiB
14 Elfogadva 79ms 16832 KiB
subtask4 0/35
15 Futási hiba 238ms 30156 KiB
16 Futási hiba 225ms 30352 KiB
17 Futási hiba 238ms 30452 KiB
18 Futási hiba 237ms 30828 KiB
19 Elfogadva 319ms 30696 KiB
20 Elfogadva 301ms 30588 KiB
21 Elfogadva 312ms 30920 KiB
22 Elfogadva 314ms 31304 KiB
23 Elfogadva 317ms 31304 KiB
24 Elfogadva 150ms 22632 KiB
25 Elfogadva 76ms 18112 KiB
26 Elfogadva 75ms 18064 KiB
27 Elfogadva 76ms 18064 KiB