Submission
Status:
[PPPPPPPPPPPPPPPPPPPP]
Score: 100
User: AungS8430
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.110 second
Submitted On: 2025-03-16 17:16:42
#include <bits/stdc++.h>
using namespace std;
int shortest_path(vector<vector<bool>> &adj, int n, bool mode) {
queue<int> q;
vector<bool> visited(n, false);
vector<int> distance(n, INT_MAX);
distance[0] = 0;
q.push(0);
while (!q.empty()) {
int x = q.front(); q.pop();
for (int i = 0; i < n; i++) {
if (adj[x][i] == mode && !visited[i]) {
distance[i] = min(distance[i], distance[x] + 10 * abs(x - i));
q.push(i);
}
}
visited[x] = true;
}
return distance[n - 1] == INT_MAX ? -1 : distance[n - 1];
}
int main(void) {
int n, m;
cin >> n >> m;
vector<vector<bool>> adj(n, vector<bool> (n, false));
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
adj[a - 1][b - 1] = adj[b - 1][a - 1] = true;
}
int time_train = shortest_path(adj, n, true);
int time_car = shortest_path(adj, n, false);
if (time_train == -1 || time_car == -1) {
cout << -1;
} else {
cout << max(time_train, time_car);
}
return 0;
}