제출 #604427

#제출 시각아이디문제언어결과실행 시간메모리
604427JomnoiEvent Hopping (BOI22_events)C++17
10 / 100
1588 ms43524 KiB
#include <bits/stdc++.h> using namespace std; const int MAX_N = 1e5 + 5; const int MAX_M = 5005; const int INF = 1e9 + 7; int S[MAX_N], E[MAX_N]; int dist[MAX_N]; int can_reach[MAX_M][MAX_M]; vector <int> graph[MAX_N]; int parent[MAX_N]; int root(int u) { if(u == parent[u]) { return u; } return parent[u] = root(parent[u]); } void merge(int u, int v) { u = root(u), v = root(v); if(u != v) { parent[v] = u; } } int main() { cin.tie(nullptr)->sync_with_stdio(false); int N, Q; cin >> N >> Q; for(int i = 1; i <= N; i++) { cin >> S[i] >> E[i]; } if(N <= 5000) { for(int i = 1; i <= N; i++) { for(int j = 1; j <= N; j++) { if(i != j and S[j] <= E[i] and E[i] <= E[j]) { graph[i].push_back(j); } } } for(int i = 1; i <= N; i++) { for(int j = 1; j <= N; j++) { dist[j] = -1; } queue <int> q; q.push(i); dist[i] = 0; while(!q.empty()) { int u = q.front(); q.pop(); for(auto v : graph[u]) { if(dist[v] == -1) { dist[v] = dist[u] + 1; q.push(v); } } } for(int j = 1; j <= N; j++) { can_reach[i][j] = dist[j]; } } while(Q--) { int s, e; cin >> s >> e; if(can_reach[s][e] == -1) { cout << "impossible\n"; } else { cout << can_reach[s][e] << '\n'; } } } else { vector <pair <int, int>> vec; for(int i = 1; i <= N; i++) { vec.emplace_back(E[i], S[i]); } sort(vec.begin(), vec.end()); for(int i = 1; i < N; i++) { if(vec[i].second <= vec[i - 1].first and vec[i - 1].first <= vec[i].first) { merge(i - 1, i); } } while(Q--) { int s, e; cin >> s >> e; int ps = lower_bound(vec.begin(), vec.end(), make_pair(e, s)) - vec.begin(); int pe = lower_bound(vec.begin(), vec.end(), make_pair(e, s)) - vec.begin(); if(ps <= pe and root(ps) == root(pe)) { cout << pe - ps << '\n'; } else { cout << "impossible\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...