답안 #653568

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
653568 2022-10-27T10:21:07 Z AlperenT Event Hopping (BOI22_events) C++17
0 / 100
80 ms 14320 KB
#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 5;

int n, q, where[N], pref[N], tin[N], tout[N], tim, depth[N];

struct Event{
    int l, r;

    bool operator < (const Event &sc) const{
        if(r == sc.r) return l < sc.l;
        else return r < sc.r;
    }
};

Event arr[N];

vector<pair<Event, int>> v;

vector<int> tree[N];

bool vis[N];

void dfs(int v, int p){
    tin[v] = ++tim;
    depth[v] = depth[p] + 1;
    vis[v] = true;

    for(auto e : tree[v]){
        if(e != p) dfs(e, v);
    }

    tout[v] = ++tim;
}

bool isanc(int a, int b){
    return (tin[a] <= tin[b] && tout[a] >= tout[b]);
}

int main(){
    ios_base::sync_with_stdio(false);cin.tie(NULL);

    cin >> n >> q;

    for(int i = 1; i <= n; i++) cin >> arr[i].l >> arr[i].r;

    for(int i = 1; i <= n; i++) v.push_back({arr[i], i});

    sort(v.begin(), v.end());

    set<pair<int, int>> st;

    for(auto p : v){
        while(!st.empty() && prev(st.end())->first >= p.first.l){
            tree[p.second].push_back(prev(st.end())->second);

            st.erase(prev(st.end()));
        }

        st.insert({p.first.r, p.second});
    }

    for(int i = n - 1; i >= 1; i--){
        if(!vis[v.back().second]){
            dfs(v.back().second, 0);
        }
    }

    while(q--){
        int s, e;

        cin >> s >> e;

        if(isanc(e, s)) cout << depth[s] - depth[e] << "\n";
        else cout << "impossible\n";
    }
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 2644 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 2644 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 2644 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 2644 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 78 ms 14264 KB Output is correct
2 Correct 80 ms 14320 KB Output is correct
3 Correct 73 ms 14260 KB Output is correct
4 Incorrect 79 ms 9484 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 2644 KB Output isn't correct
2 Halted 0 ms 0 KB -