Submission #605072

#TimeUsernameProblemLanguageResultExecution timeMemory
605072l_rehoEvent Hopping (BOI22_events)C++14
10 / 100
1583 ms7140 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long int N, Q; vector<ll> S, E; vector<array<ll, 3>> ranges; void solve(){ cin>>N>>Q; S.assign(N, 0); E.assign(N, 0); ranges.assign(N, array<ll, 3>()); // graph.assign(N, vector<int>()); for(int i = 0; i < N; i++){ int s, e; cin>>s>>e; S[i] = s; E[i] = e; ranges[i] = {s, e, i}; } sort(ranges.begin(), ranges.end(), [&](array<ll, 3> a, array<ll, 3> b){ return a[1] > b[1]; }); for(int q = 0; q < Q; q++){ int sq, eq; cin>>sq>>eq; sq--; eq--; queue<int> que; que.push(sq); vector<ll> dist(N, LLONG_MAX); dist[sq] = 0; while(!que.empty()){ int curr = que.front(); que.pop(); // vector<int> adj = graph[curr]; // cerco il primo nodo tale che end di quel nodo è < se // posso trovarlo in O(logn) int node = (dist[eq] == LLONG_MAX && S[eq] <= E[curr] && E[eq] >= E[curr]) ? eq : -1; if(node == -1) for(int j = 0; j < N; j++){ if(dist[ranges[j][2]] == LLONG_MAX && ranges[j][0] <= E[curr] && ranges[j][1] >= E[curr] && ranges[j][1] <= E[eq]) { node = ranges[j][2]; break; } } if(node != -1){ dist[node] = dist[curr] +1; que.push(node); } /* for(int a : adj){ if(dist[sq][a] != INT_MAX) continue; dist[sq][a] = dist[sq][curr]+1; que.push(a); } */ } if(dist[eq] == LLONG_MAX) cout<<"impossible"<<endl; else cout<<dist[eq]<<endl; } } int main(){ 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...