Submission

Status:
[PPPPPPPPPPPPPPPPPPPP]

Score: 100

User: Nakornrat

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

Language: cpp

Time: 0.019 second

Submitted On: 2025-03-22 21:58:08

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
int cnt = 0;
using pii = pair<int, int>;
int n, m;
vector<vector<pii>> ght;
vector<vector<pii>> ghc;
bool mem[4010][4010];
int dijkstra(vector<vector<pii>> &gh, vector<int> &dist){
    priority_queue<pii, vector<pii>, greater<pii>> q;
    q.push({0, 1});
    dist[1] = 0;
    while(!q.empty()){
        auto [uw, un] = q.top();q.pop();
        if(uw>dist[un])continue;
        for(auto [vn, vw]:gh[un]){
            int ww = dist[un] + vw;
            if(ww<dist[vn]){
                dist[vn] = ww;
                q.push({ww, vn});
            }
        }
    }
    if(dist[n]==INT_MAX)return -1;
    return dist[n];
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);
    cin>>n>>m;
    vector<int> distt(n+1, INT_MAX);
    vector<int> distc(n+1, INT_MAX);
    ght.resize(n+1);
    ghc.resize(n+1);
    while(m--){
        int u, v;cin>>u>>v;
        int weight = 10*(v-u);
        if(weight<0)weight = -weight;
        ght[u].push_back({v, weight});
        ght[v].push_back({u, weight});
        mem[u][v] = mem[v][u] = 1;
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(mem[i][j]||i==j)continue;
            mem[i][j] = mem[j][i] = 1;
            int weight = 10*(j-i);
            if(weight<0)weight = -weight;
            ghc[i].push_back({j, weight});
            ghc[j].push_back({i, weight});
        }
    }
    int train = dijkstra(ght, distt);
    int car = dijkstra(ghc, distc);
    if(train==-1||car==-1)cout<<-1;
    else cout<<max(train, car);

}