Submission #967150

#TimeUsernameProblemLanguageResultExecution timeMemory
967150vladiliusEvent Hopping (BOI22_events)C++17
10 / 100
1581 ms30804 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int inf = numeric_limits<int> :: max();
using pii = pair<int, int>;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int n, q; cin>>n>>q;
    vector<int> l(n + 1), r(n + 1);
    for (int i = 1; i <= n; i++){
        cin>>l[i]>>r[i];
    }
    
    vector<int> g[n + 1];
    for (int i = 1; i <= n; i++){
        for (int j = 1; j <= n; j++){
            if (i == j) continue;
            if (l[j] <= r[i] && r[i] <= r[j]){
                g[i].push_back(j);
            }
        }
    }
    
    auto get = [&](int x, int y){
        vector<int> ans(n + 1, inf);
        ans[x] = 0;

        priority_queue<pii, vector<pii>, less<pii>> pq;
        pq.push({0, x});
        while (!pq.empty()){
            auto [d, v] = pq.top(); pq.pop();
            d++;
            for (int i: g[v]){
                if (ans[i] > d){
                    ans[i] = d;
                    pq.push({d, i});
                }
            }
        }
        
        return ans[y];
    };
    
    while (q--){
        int s, f; cin>>s>>f;
        int out = get(s, f);
        if (out == inf){
            cout<<"impossible"<<"\n";
        }
        else {
            cout<<out<<"\n";
        }
    }
}
#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...