Submission
Status:
[PPPPPPPPPPPPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: kittipos
Problemset: รถยนต์ รถไฟ เรือเมล์ ลิเก ตำรวจ
Language: cpp
Time: 0.022 second
Submitted On: 2026-03-05 12:42:18
#include <iostream>
#include <vector>
#include <limits>
#include <queue>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<vector<int>> road;
vector<vector<int>> train;
road.assign(n, vector<int>(n, 0));
train.assign(n, vector<int>(n, -1));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
road[i][j] = 10 * abs(i - j);
}
}
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
a--;
b--;
road[a][b] = -1;
road[b][a] = -1;
train[a][b] = 10 * abs(a - b);
train[b][a] = 10 * abs(a - b);
}
// calculate car time
int best_car;
{
queue<int> q;
q.push(0);
vector<int> node_distance;
node_distance.assign(n, numeric_limits<int>::max());
node_distance[0] = 0;
while (!q.empty()) {
int current = q.front();
q.pop();
for (int i = 0; i < n; i++) {
if (i == current || road[current][i] == -1) {
continue;
}
if (road[current][i] + node_distance[current] < node_distance[i]) {
node_distance[i] = road[current][i] + node_distance[current];
q.push(i);
}
}
}
best_car = node_distance[n - 1];
}
int best_train;
{
queue<int> q;
q.push(0);
vector<int> node_distance;
node_distance.assign(n, numeric_limits<int>::max());
node_distance[0] = 0;
while (!q.empty()) {
int current = q.front();
q.pop();
for (int i = 0; i < n; i++) {
if (i == current || train[current][i] == -1) {
continue;
}
if (train[current][i] + node_distance[current] < node_distance[i]) {
node_distance[i] = train[current][i] + node_distance[current];
q.push(i);
}
}
}
best_train = node_distance[n - 1];
}
int res = max(best_car, best_train);
if (res == 2147483647)
{
cout << -1 << endl;
} else {
cout << res << endl;
}
return 0;
}