#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct dint{
int a;
int b;
};
int N, Q, vzd;
vector<dint> A;
vector<int> ot;
vector<int> ot2;
vector<bool> uzavreno;
vector<vector<int>> sousede;
bool jde(int i, int j) {
return ((A[j].a <= A[i].b) && (A[i].b <= A[j].b));
}
int main() {
cin >> N >> Q;
A.resize(N);
for (int i = 0; i < N; i++) {
cin >> A[i].a >> A[i].b;
}
sousede.resize(N);
for (int i = 0; i < N; i++) {
sousede[i].resize(0);
for (int j = 0; j < N; j++) {
if (jde(i, j)) {
sousede[i].push_back(j);
}
}
}
for (int q = 0; q < Q; q++) {
int u, v;
cin >> u >> v; u--; v--;
uzavreno.resize(N);
for (int i = 0; i < N; i++) {
uzavreno[i] = false;
}
vzd = -1;
ot.resize(0);
ot2.resize(1);
ot2[0] = u;
uzavreno[u] = true;
while (ot2.size() > 0) {
ot.resize(ot2.size());
for (int i = 0; i < ot.size(); i++) {
ot[i] = ot2[i];
}
ot2.resize(0);
vzd++;
while (ot.size()) {
int o = ot.back(); ot.pop_back();
if (o == v) {
cout << vzd << endl;
goto hotovo;
}
for (int s: sousede[o]) if (!(uzavreno[s])) {
ot2.push_back(s);
uzavreno[s] = true;
}
}
}
cout << "impossible\n";
hotovo:;
}
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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |