제출 #864148

#제출 시각아이디문제언어결과실행 시간메모리
864148danikoynovEvent Hopping (BOI22_events)C++14
0 / 100
1551 ms98900 KiB
#include<bits/stdc++.h> #define debug true #ifdef DEVAL #define debug false #endif using namespace std; const int maxn = 1e5 + 10; struct interval { int s, e; }seg[maxn]; int n, q; pair < int, int > task[maxn]; void read() { cin >> n >> q; for (int i = 1; i <= n; i ++) { cin >> seg[i].s >> seg[i].e; } for (int i = 1; i <= q; i ++) { cin >> task[i].first >> task[i].second; } } vector < int > adj[maxn]; int used[maxn], dist[5010][5010]; int nxt[5010][5010]; int my_queue[maxn]; void bfs(int start) { for (int i = 1; i <= n; i ++) used[i] = -1; used[start] = 0; int st = 1, en = 0; my_queue[++ en] = start; while(st <= en) { int v = my_queue[st ++]; int u = nxt[v][0]; while(u <= n) { if (used[u] == - 1) { used[u] = used[v] + 1; my_queue[++ en] = u; } u = nxt[v][u]; } } } void build_graph() { for (int i = 1; i <= n; i ++) { for (int j = 0; j <= n; j ++) nxt[i][j] = n + 1; int last = 0; for (int j = 1; j <= n; j ++) { if (seg[j].s <= seg[i].e && seg[i].e <= seg[j].e) nxt[i][last] = j, last = j; } } } void answer_queries() { for (int i = 1; i <= q; i ++) { if (dist[task[i].first][task[i].second] == -1) cout << "impossible" << endl; else cout << dist[task[i].first][task[i].second] << endl; } } void precalc() { for (int v = 1; v <= n; v ++) { bfs(v); for (int i = 1; i <= n; i ++) dist[v][i] = used[i]; } } void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } void solve() { read(); build_graph(); precalc(); answer_queries(); } int main() { speed(); solve(); 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...