Submission #721606

#TimeUsernameProblemLanguageResultExecution timeMemory
721606drdilyorEvent Hopping (BOI22_events)C++17
0 / 100
1540 ms12336 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int inf = 1e9 + 1e5; struct event { int l, r, i; }; int main() { int n, m; cin >> n >> m; vector<event> ev(n), og; map<int,int> comp; int _i = 0; for (auto& [s, e, i] : ev) { cin >> s >> e; comp[s] = comp[e] = 0; i = _i++; } int k = 0; for (auto& mp : comp) mp.second = k++; for (auto& [s, e, i] : ev) s = comp[s], e = comp[e]; og = ev; sort(ev.begin(), ev.end(), [&](auto& a, auto& b) { return a.r < b.r; }); while (m--) { int s, e; cin >> s >> e; s--;e--; if (s == e) { cout << "0\n"; continue; } int si = 0, ei; for (int j = 0; j < n; j++) { if (ev[j].i == s) si = j; if (ev[j].i == e) ei = j; } vector memo(n+1, -1); auto dp = [&](auto& dp, int i)->int{ int t = ev[i].r; if (i == ei) return 0; if (t > ev[ei].r) return inf; if (memo[i]!=-1) return memo[i]; int res = inf; for (int j = i+1; j < n; j++) { if (ev[j].l <= t && t <= ev[j].r) res = min(res, 1 + dp(dp, j)); } return memo[i] = res; }; int res = dp(dp, si); if (res < inf) cout << res << '\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...