Submission

Status:

[PPPPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: navysrimuang

Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ

Language: cpp

Time: 0.037 second

Submitted On: 2026-03-18 13:59:02

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll INF = 1e9;
int n,m;
vector<vector<pair<ll,int>>> train,road;

vector<ll> dijkstra(vector<vector<pair<ll,int>>> adj){
		vector<ll> dist(n+1,INF);
		dist[1] = 0;
		priority_queue<pair<ll,int>, vector<pair<ll,int>>, greater<pair<ll,int>>> pq;
		pq.push({0,1});
		while(pq.size()){
			auto [dis,node] = pq.top();
			pq.pop();
			if(dis > dist[node]) continue;

			for(auto [w,child] : adj[node]){
				if(dis + w < dist[child]){
					dist[child] = dis + w;
					pq.push({dist[child],child});
				}
			}

		}
		return dist;
}
int main(){
	cin.tie(0)->sync_with_stdio(0);
	cin >> n >> m;
	train.resize(n+1);
	road.resize(n+1);
	for(int i = 1;i<=n;i++){
			for(int j = 1;j<=n;j++){
				if(i == j) continue;
				road[i].push_back({10*abs(j-i),j});
			}
	}
	
	for(int i = 0;i<m;i++){
		int a,b;
		cin >> a >> b;
		ll c = 10*abs(a-b);
		train[a].push_back({c,b});
		train[b].push_back({c,a});
		road[a].erase(remove(road[a].begin(),road[a].end(),make_pair(c,b)),road[a].end());
		road[b].erase(remove(road[b].begin(),road[b].end(),make_pair(c,a)),road[b].end());
		
		
	}
	
	vector<ll> dt(n+1),dr(n+1);
	dt = dijkstra(train);
	dr = dijkstra(road);
	
	if(dt[n] == INF || dr[n] == INF) cout << -1 << "\n";
	else cout << max(dt[n],dr[n]) << "\n";
	return 0;
}