Submission #1216217

#TimeUsernameProblemLanguageResultExecution timeMemory
1216217Ghulam_JunaidEvent Hopping (BOI22_events)C++20
0 / 100
1517 ms18528 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10, LG = 18;
int n, que, par[N][LG], a[N][2], dist[5005][5005], edge[5005][5005];
vector<pair<pair<int, int>, int>> vec;
vector<int> g[N];

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin >> n >> que;
    for (int i = 0; i < n; i ++){
        int s, e;
        cin >> s >> e;
        a[i][0] = s, a[i][1] = e;
        // vec.push_back({{s, 0}, i});
        // vec.push_back({{e, 1}, i});
    }
    // sort(vec.begin(), vec.end());

    for (int i = 0; i < n; i ++){
        for (int j = 0; j < n; j ++){
            if (i == j) continue;
            if (a[i][0] <= a[j][1] and a[j][1] <= a[i][1])
                edge[j][i] = 1;
        }
    }

    queue<int> q;
    for (int s = 0; s < n; s ++){
        dist[s][s] = 1;
        q.push(s);
        while (!q.empty()){
            int v = q.front();
            q.pop();

            for (int u = 0; u < n; u ++){
                if (!edge[v][u]) continue;
                if (dist[s][u] == 0){
                    dist[s][u] = dist[s][v] + 1;
                    q.push(u);
                }
            }
        }
    }

    for (int id = 0; id < que; id ++){
        int l, r;
        cin >> l >> r;
        l--; r--;

        if (dist[l][r] == 0)
            cout << "impossible\n";
        else
            cout << dist[l][r] - 1 << '\n';
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...