Submission

Status:

[PPPPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: mantaggez

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

Language: cpp

Time: 0.078 second

Submitted On: 2026-03-20 20:13:00

#include <bits/stdc++.h>

using namespace std;
using pii = pair<int, int>;

const int nx = 405;
const int INF = 1e9;

int n, m;
int train[nx][nx], car[nx][nx];

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin >> n >> m;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=n;j++) {
            if(i == j) continue;
            train[i][j] = train[j][i] = INF;
            car[i][j] = car[j][i] = INF;
        }
    }

    for(int i=0;i<m;i++) {
        int u, v;
        cin >> u >> v;
        train[u][v] = train[v][u] = 10 * abs(u - v);
    }

    for(int i=1;i<=n;i++) {
        for(int j=1;j<=n;j++) {
            if(train[i][j] != INF) continue;
            car[i][j] = car[j][i] = 10 * abs(i - j);
        }
    }

    for(int k=1;k<=n;k++) {
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=n;j++) {
                train[i][j] = min(train[i][j], train[i][k] + train[k][j]);
                car[i][j] = min(car[i][j], car[i][k] + car[k][j]);
            }
        }
    }

    // cout << train[1][n] << ' ' << car[1][n] << '\n'; 
    int ans = max(train[1][n], car[1][n]);
    cout << (ans == INF ? -1 : ans);

    return 0;
}