제출 #1352527

#제출 시각아이디문제언어결과실행 시간메모리
1352527matsakyannnEvent Hopping (BOI22_events)C++20
10 / 100
1600 ms128288 KiB
#include <bits/stdc++.h>
using namespace std;

#define dbg(x) cerr << #x << ' '; print(x); cerr << endl;
void print(int x) {cerr << x;}
void print(long long x) {cerr << x;}
void print(double x) {cerr << x;}
void print(char x) {cerr << x;}
void print(string x) {cerr << x;}
template <class T> void print(vector <T> x);
template <class T> void print(set <T> x);
template <class T> void print(multiset <T> x);
template <class T, class V> void print(pair <T, V> x);
template <class T> void print(vector <T> x) {cerr << "[ "; for(T i : x) {print(i); cerr << ' ';} cerr << "]";}
template <class T> void print(set <T> x) {cerr << "[ "; for(T i : x) {print(i); cerr << ' ';} cerr << "]";}
template <class T> void print(multiset <T> x) {cerr << "[ "; for(T i : x) {print(i); cerr << ' ';} cerr << "]";}
template <class T, class V> void print(pair <T, V> x) {cerr << '{'; print(x.first); cerr << ", "; print(x.second); cerr << '}';}

#define ll long long
#define MP make_pair
#define OK cerr << "OK\n";
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define ppb pop_back
#define PII pair <int, int>

void fastIO(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
}

const int inf = 1e9 + 5;
const ll inf64 = 1e18 + 5;

const int N = 5005;
int n, q, dist[N][N];
vector <PII> event;
vector <int> G[N];
vector <bool> added;
//vector <vector <int>> dist;

void solve(){
    cin >> n >> q;
    event.resize(n + 1);
    for(int i = 1; i <= n; i++){
        cin >> event[i].first >> event[i].second;
        // slt.pb({event[i].first, {0, i}});
        // slt.pb({event[i].second, {1, i}});
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            if(event[i].second >= event[j].first && event[i].second <= event[j].second){
                G[i].pb(j);
            }
            dist[i][j] = -1;
        }
    }

    //dist.assign(n + 1, vector<int>(n + 1, -1));
    queue <int> qu;
    for(int i = 1; i <= n; i++){
        qu.push(i);
        dist[i][i] = 0;
        added.assign(n + 1, 0);
        added[i] = 1;
        while(!qu.empty()){
            int node = qu.front();
            qu.pop();
            for(int u : G[node]){
                if(dist[i][u] != -1) continue;
                dist[i][u] = dist[i][node] + 1;
                assert(!added[u]);
                added[u] = 1;
                qu.push(u);
            }
        }
    }

    while(q--){
        int u, v;
        cin >> u >> v;
        if(dist[u][v] == -1){
            cout << "impossible\n";
        }
        else{
            cout << dist[u][v] << endl;
        }
    }
}

int main(){
    fastIO();
    int TST = 1;
    //cin >> TST;
    while(TST--) solve();
}
#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...