Submission
Status:
[-SSSSSSSSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: Zonezonee
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.004 second
Submitted On: 2025-12-13 18:36:56
#include <bits/stdc++.h>
using namespace std;
const int N = 4e2+10;
int n, m;
long long dist1[N][N], dist2[N][N];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
memset(dist1, 0x3f, sizeof dist1);
memset(dist2, 0x3f, sizeof dist2);
while(m--){
int u, v;
cin >> u >> v;
dist1[u][v] = dist1[v][u] = abs(u-v);
}
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j){
if(dist1[i][j] == 0x3f3f3f3f){
dist2[i][j] = dist2[j][i] = abs(j-i);
}
}
}
for(int k = 1; k <= n; ++k){
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j){
dist1[i][j] = min(dist1[i][j], dist1[i][k] + dist1[k][j]);
}
}
}
for(int k = 1; k <= n; ++k){
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j){
if(i == 1 && dist2[i][k] + dist2[k][j] == dist1[i][j]) continue;
dist2[i][j] = min(dist2[i][j], dist2[i][k] + dist2[k][j]);
}
}
}
int ans = max(dist1[1][n], dist2[1][n]);
cout << (ans == 0x3f3f3f3f3f3f3f3f ? -1 : 10*ans);
}