Submission

Status:
[PPPPPPPPPPPPPPPPP-SS]

Score: 0

User: yumiKuri

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

Language: cpp

Time: 0.083 second

Submitted On: 2025-03-23 15:59:27

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

const int N = 401;
set<int> adj[N];
int train[N], car[N];
bool visited[N];
queue<int> q;

int main(){
    ios_base::sync_with_stdio(0), cin.tie(0);

    int n, m;
    cin >> n >> m;
    memset(visited, false, sizeof(visited));
    memset(train, -1, sizeof(train));
    memset(car, -1, sizeof(car));
    train[1] = 0;
    car[1] = 0;

    for(int i = 0; i < m; i++){
        int u, v;
        cin >> u >> v;
        adj[u].insert(v);
        adj[v].insert(u);
    }

    q.push(1);

    while(!q.empty()){
        int u = q.front();
        q.pop();

        if(visited[u]) continue;
        visited[u] = true;

        for(int v: adj[u]){
            if(train[v] == -1 or train[u] + 10*abs(v-u) < train[v]){
                train[v] = train[u] + 10*abs(v-u);
                q.push(v);
            }
        }
    }

    /*for(int i = 1; i <= n; i++) cout << train[i] << ' ';
    cout << '\n';*/

    memset(visited, false, sizeof(visited));

    q.push(1);

    while(!q.empty()){
        int u = q.front();
        q.pop();
        //cout << u << ' ';

        if(visited[u]) continue;
        visited[u] = true;

        for(int i = 1; i <= n; i++){
            if(u != i and adj[u].find(i) == adj[u].end()){
                if((car[i] == -1 or car[u] + 10*abs(i-u) < car[i]) and (train[i] != car[u] + 10*abs(i-u) or i == n)){
                    car[i] = car[u] + 10*abs(i-u);
                    //cout << i << ' ' << car[i] << ' ';
                    q.push(i);
                }
            }
        }
        //cout << '\n';
    }

    /*for(int i = 1; i <= n; i++) cout << car[i] << ' ';
    cout << '\n';*/

    if(car[n] == -1 or train[n] == -1) cout << -1;
    else{
        int temp = max(car[n], train[n]);
        cout << temp;
    }
}