Submission
Status:
[PPPPPPPPPPPPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: meme_boi2
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.011 second
Submitted On: 2026-03-18 19:40:18
#include <bits/stdc++.h>
using namespace std;
bool chk[401][401];
vector<vector<pair<int,int>>> path(401),graph(401);
#define pii pair<int,int>
int32_t main(){
cin.tie(nullptr)->sync_with_stdio(0);
int n, m;
cin >> n >> m;
while(m--){
int u, v;
cin >> u >> v;
chk[u][v] = 1;
chk[v][u] = 1;
path[u].push_back({v,abs(u-v)*10});
path[v].push_back({u,abs(u-v)*10});
}
for(int i = 1; i<= n; i++){
for(int j = i+ 1; j <= n; j++){
if(i != j && !chk[i][j]){
graph[i].push_back({j,abs(i-j)*10});
graph[j].push_back({i,abs(i-j)*10});
}
}
}
priority_queue<pii,vector<pii>,greater<pii>> pq;
vector<int> dist(401,1e9);
if(!chk[1][n]){
dist[1] = 0;
pq.push({0,1});
while(!pq.empty()){
auto [w,u] = pq.top();
pq.pop();
if(dist[u] < w) continue;
for(auto [v,x] : path[u]){
if(dist[u] + x < dist[v]){
pq.push({dist[v] = dist[u] + x,v});
}
}
}
}else{
dist[1] = 0;
pq.push({0,1});
while(!pq.empty()){
auto [w,u] = pq.top();
// cout << u << ' ' << w << " kungaroo\n";
pq.pop();
if(dist[u] < w) continue;
for(auto [v,x] : graph[u]){
if(dist[u] + x < dist[v]){
pq.push({dist[v] = dist[u] + x,v});
}
}
}
}
// cout << "Distance : " << dist[n] << '\n';
int ans = max(dist[n],10*n - 10);
if(ans > 1e9 - 7){
cout << -1;
}else{
cout << ans;
}
}