Submission #579726

#TimeUsernameProblemLanguageResultExecution timeMemory
579726jasminEvent Hopping (BOI22_events)C++17
10 / 100
1595 ms524288 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int inf=1e18; int find_dist(int v, int ende, vector<vector<int> >& adi, vector<pair<int,int> >& e){ if(e[ende].second<e[v].second) return inf; if(v==ende) return 0; int best=v; for(auto u: adi[v]){ if(u==ende){ best=u; break; } if(e[best].second<e[u].second && e[u].second<=e[ende].second){ best=u; } } if(best==ende) return 1; if(e[best].second==e[v].second) return inf; int ans=find_dist(best, ende, adi, e); if(ans==inf) return inf; return ans+1; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n, q; cin >> n >> q; vector<pair<int,int> > e(n); map<int, pair<vector<int>, vector<int> > > time; for(int i=0; i<n; i++){ int s, t; cin>> s >> t; e[i]={s, t}; time[s].first.push_back(i); time[t].second.push_back(i); } vector<vector<int> > adi(n); set<int> active; for(auto m: time){ for(auto e: m.second.first){ active.insert(e); } for(auto e: m.second.second){ for(auto x: active){ adi[e].push_back(x); } } for(auto e: m.second.second){ active.erase(e); } } for(int i=0; i<q; i++){ int s, t; cin >> s >> t; int ans=find_dist(s-1, t-1, adi, e); if(ans==inf){ cout << "impossible\n"; } else{ cout << ans << "\n"; } } }
#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...