#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, q;
pair<int, int> a[200005];
vector<int> g[200005];
bool visited[200005];
int dist[200005], d1[200005], dn[200005];
int32_t main() {
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i].first >> a[i].second;
for (int j = a[i].first; j <= a[i].second; j++)
g[j].push_back(i);
}
cin >> q;
while (q--) {
int x; cin >> x;
fill(dist, dist + n + 1, 1e9);
fill(d1, d1 + n + 1, 1e9);
fill(dn, dn + n + 1, 1e9);
queue<int> q; q.push(x);
visited[x] = 1; dist[x] = 0;
while (!q.empty()) {
int v = q.front(); q.pop();
for (int i = a[v].first; i <= a[v].second; i++) {
if (visited[i]) continue;
visited[i] = 1;
dist[i] = dist[v] + 1;
q.push(i);
}
}
memset(visited, 0, sizeof(visited));
for (const int u : g[1]) {
q.push(u); visited[u] = 1, d1[u] = 0;
}
while (!q.empty()) {
int v= q.front(); q.pop();
for (const int u : g[v]) {
if (visited[u]) continue;
visited[u] = 1;
d1[u] = d1[v] + 1;
q.push(u);
}
}
memset(visited, 0, sizeof(visited));
for (const int u : g[n]) {
q.push(u); visited[u] = 1, dn[u] = 0;
}
while (!q.empty()) {
int v= q.front(); q.pop();
for (const int u : g[v]) {
if (visited[u]) continue;
visited[u] = 1;
dn[u] = dn[v] + 1;
q.push(u);
}
}
int ans = 1e9;
for (int i = 1; i <= n; i++) {
int tmp = dist[i] + d1[i] + dn[i];
ans = min(ans, tmp);
//if (tmp == ans) cout << i << ' ' << dist[i] << ' ' << d1[i] << ' ' << dn[i] << '\n';
}
cout << (ans == 1e9 ? -1 : ans + 1) << '\n';
}
}
# | 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... |