제출 #1267788

#제출 시각아이디문제언어결과실행 시간메모리
1267788gustavo_dRailway Trip 2 (JOI22_ho_t4)C++20
0 / 100
715 ms589824 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 1e5; vector<int> adj[MAXN]; int dist[MAXN]; int l[MAXN], r[MAXN]; bool vis[MAXN]; vector<int> updL[MAXN], updR[MAXN]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, k; cin >> n >> k; int m; cin >> m; for (int i=0; i<m; i++) { int a, b; cin >> a >> b; a--; b--; if (a <= b) { // r[a...min(b, a+k-1)] = max(b) // cout << "r: " << a << ' ' << min(b, a+k-1) << '=' << b << endl; updR[a].push_back(b); updR[min(b, a+k-1)].push_back(-b); } else { // l[max(b, a-k+1)...a] = min(a) // cout << "l: " << max(b, a-k+1) << ' ' << a << '=' << b << endl; updL[max(b, a-k+1)].push_back(b); updL[a].push_back(-b); } } multiset<int> pfL, pfR; for (int i=0; i<n; i++) { for (int x : updL[i]) { if (x < 0) continue; pfL.insert(x); } for (int x : updR[i]) { if (x < 0) continue; pfR.insert(x); } l[i] = (pfL.empty() ? i : *pfL.begin()); r[i] = (pfR.empty() ? i : *pfR.rbegin()); for (int x : updL[i]) { if (x > 0) continue; pfL.erase(pfL.find(-x)); } for (int x : updR[i]) { if (x > 0) continue; pfR.erase(pfR.find(-x)); } } for (int i=0; i<n; i++) { // cout << l[i] << ' ' << r[i] << endl; for (int j=l[i]; j<=r[i]; j++) { adj[i].push_back(j); } } int qs; cin >> qs; for (int q=0; q<qs; q++) { int src, dest; cin >> src >> dest; src--; dest--; if (src == dest) { cout << 0 << endl; continue; } dist[src] = 1; queue<int> visit; for (int i=0; i<n; i++) vis[i] = false; vis[src] = true; bool found = false; visit.push(src); while (!visit.empty()) { int v = visit.front(); visit.pop(); // cout << v << endl; if (l[v] <= dest and dest <= r[v]) { cout << dist[v] << '\n'; found = true; break; } for (int viz : adj[v]) { if (vis[viz]) continue; visit.push(viz); vis[viz] = true; dist[viz] = dist[v] + 1; } } if (!found) cout << -1 << '\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...