Submission

Status:

[PPPPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: KantaponZ

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

Language: cpp

Time: 0.013 second

Submitted On: 2025-07-26 00:04:50

#include <bits/stdc++.h>
using namespace std;

#define ll long long

int N, M;
bool con[405][405];
vector<vector<ll>> adj(405);
priority_queue<pair<ll,ll>> pq;
ll dist[405];

int main() {
    ios_base::sync_with_stdio(0), cin.tie(0);
    cin >> N >> M;
    while (M--) {
        int u, v;
        cin >> u >> v;
        con[u][v] = con[v][u] = 1;
    }
    for (int i = 1; i <= N; i++) dist[i] = 1e18;
    if (con[1][N]) {
        for (int i = 1; i <= N; i++) {
            for (int j = i + 1; j <= N; j++) {
                if (con[i][j] || con[j][i]) continue;
                adj[i].push_back(j);
                adj[j].push_back(i);
            }
        }
    } else {
        for (int i = 1; i <= N; i++) {
            for (int j = i + 1; j <= N; j++) {
                if (!(con[i][j] || con[j][i])) continue;
                adj[i].push_back(j);
                adj[j].push_back(i);
            }
        }
    }
    pq.emplace(0, 1);
    dist[1] = 0;
    while (!pq.empty()) {
        
        auto [w, u] = pq.top();
        //cout << dist[u];
        pq.pop();
        w *= -1;
        for (auto v : adj[u]) {
            if (dist[v] <= w + 10 * abs(v - u)) continue;
            dist[v] = w + 10 * abs(v - u);
            pq.emplace(-(w + 10 * abs(v - u)), v);
        }
    }
    if (dist[N] == 1e18) {
        cout << -1;
    } else {
        cout << dist[N];
    }
}

/*

400 1
1 400

*/