#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
vector<vector<int>> p(n);
int f, s, z;
for (int i = 0; i < m; i++) {
int b, c;
cin >> b >> c;
if (i == 0) f = b, s = c;
if (i == 1) z = b;
if (c < n) p[b].push_back(c);
}
for (int i = 0; i < n; i++) {
sort(p[i].begin(), p[i].end());
p[i].erase(unique(p[i].begin(), p[i].end()), p[i].end());
}
const int inf = 1e9;
vector<vector<int>> d(n, vector<int>(n, inf));
d[f][0] = 0;
deque<pair<int, int>> dq;
dq.emplace_front(f, 0);
while (!dq.empty()) {
auto [u, v] = dq[0];
if (u == z) {
cout << d[u][v];
return 0;
}
dq.pop_front();
if (!v) {
for (int i : p[u]) {
if (d[u][i] > d[u][v]) {
d[u][i] = d[u][v];
dq.emplace_front(u, i);
}
}
}
else {
if (d[u][v] < d[u][0]) {
d[u][0] = d[u][v];
dq.emplace_front(u, 0);
}
if (u + v < n && d[u + v][v] > d[u][v] + 1) {
d[u + v][v] = d[u][v] + 1;
dq.emplace_back(u + v, v);
}
if (u - v >= 0 && d[u - v][v] > d[u][v] + 1) {
d[u - v][v] = d[u][v] + 1;
dq.emplace_back(u - v, v);
}
}
}
cout << -1;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |