Submission

Status:

[PPPPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: Quaoar

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

Language: cpp

Time: 0.028 second

Submitted On: 2026-03-10 22:18:08

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

int src = 1;
int re(int m , int k , vector <pair <int,int>> adj[]){
    vector <int> dist(m + 1 , INT_MAX);
    priority_queue < pair<int,int> , vector<pair<int,int>> , greater<pair<int,int>>> pq;

    dist[src] = 0;
    pq.push({0 , src});

    while(!pq.empty()){
        int currDist = pq.top().first;
        int u = pq.top().second;
        
        pq.pop();

        if (currDist > dist[u]){
            continue;
        }
        for (auto smth : adj[u]){
            int v = smth.first;
            int distance = smth.second;

            if (dist[v] > dist[u] + distance){
                dist[v] = dist[u] + distance;
                pq.push({dist[v] , v});
            }
        }
    }
    return dist[k];
}

int main(){
    int n , k;
    cin >> k >> n;

    vector <pair <int,int>> adjt[k + 1];
    vector <pair <int,int>> adjc[k + 1];
    for (int i = 0 ; i < n ; i++){
        int u , v;
        cin >> u >> v;
        int w = 10 * abs(u - v);
        adjt[u].push_back({v , w});
        adjt[v].push_back({u , w});
    }
    for (int u = 1 ; u <= k ; u++){
        for (int v = u + 1 ; v <= k ; v++){

            bool exist = false;
            for (auto smth : adjt[u]){
                int check = smth.first;
                if (check == v){
                    exist = true;
                    break;
                }
            }

            if (!exist){
                int w = 10 * abs(u - v);
                adjc[u].push_back({v , w});
                adjc[v].push_back({u , w});
            }

        }
    }
    int result = max(re(k , k , adjc) , re(k , k , adjt));

    if (result == INT_MAX ){
        cout << -1;
    } else {
        cout << result;
    }
    
    return 0;
}