Submission
Status:
[PPPPPPPPPPPPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: dddrrrr
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.018 second
Submitted On: 2026-03-11 10:47:56
#include <bits/stdc++.h>
#define int long long
using namespace std;
int dijk(vector <vector <pair <int ,int>>> &adj ,int n){
priority_queue <pair <int,int> ,vector <pair <int,int>> ,greater <pair <int,int>>> pq;
vector <int> dist(n+1 ,LLONG_MAX);
pq.push({0 ,1});
dist[1] = 0;
while(!pq.empty()){
int d=pq.top().first ,u=pq.top().second;
pq.pop();
if(d > dist[u])continue;
for(auto &nxt : adj[u]){
int v=nxt.first ,w=nxt.second;
if(d + w < dist[v]){
dist[v] = d+w;
pq.push({dist[v] ,v});
}
}
}
return dist[n];
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n ,m;cin >> n >> m;
vector <vector <pair <int ,int>>> train(n+1) ,car(n+1);
while(m--){
int u, v;
cin >> u >> v;
int w = abs(u - v)*10;
train[u].emplace_back(v ,w);
train[v].emplace_back(u, w);
}
for(int i=1 ;i<=n ;i++){
unordered_set <int> s;
for(auto j : train[i])s.insert(j.first);
//cout << "i" << "\n";
for(int j=1 ;j<=n ;j++){
if(!s.count(j) && i != j){
//cout << i << ' ' << j << '\n';
int w = abs(i - j)*10;
car[i].emplace_back(j ,w);
car[j].emplace_back(i ,w);
}
}
//cout << "next\n";
}
int a = dijk(train ,n);
int b = dijk(car ,n);
int mx = max(a ,b);
if(mx == LLONG_MAX)cout << -1;
else cout << mx;
return 0;
}