Submission #1307421

#TimeUsernameProblemLanguageResultExecution timeMemory
1307421msab3fBitaro’s Party (JOI18_bitaro)C++20
100 / 100
573 ms135676 KiB
#include <bits/stdc++.h> using namespace std; const int MAX_N = 100000 + 10; const int SQ = 160; int n, m, q; vector<int> adj[MAX_N]; vector<pair<int, int>> fars[MAX_N]; bool block[MAX_N], mark[MAX_N]; int main() { cin >> n >> m >> q; for (int i = 1, s, e; i <= m; ++i) { cin >> s >> e; adj[e].push_back(s); } for (int i = 1; i <= n; ++i) { fars[i].push_back({0, i}); for (int j : adj[i]) { vector<pair<int, int>> new_fars; for (int pi = 0, pj = 0; pi + pj < int(fars[i].size() + fars[j].size()) && new_fars.size() < SQ;) { if (pi < fars[i].size() && (pj == fars[j].size() || fars[i][pi].first >= fars[j][pj].first + 1)) { if (!mark[fars[i][pi].second]) { new_fars.push_back(fars[i][pi]); mark[fars[i][pi].second] = true; } ++pi; } else { if (!mark[fars[j][pj].second]) { new_fars.push_back(fars[j][pj]); ++new_fars.back().first; mark[fars[j][pj].second] = true; } ++pj; } } fars[i] = new_fars; for (auto [d, u] : fars[i]) { mark[u] = false; } } } while (q--) { int t, y; cin >> t >> y; vector<int> blocks(y, 0); for (int &c : blocks) { cin >> c; block[c] = true; } int res = -1; if (y < SQ) { for (auto [d, u] : fars[t]) { if (!block[u]) { res = d; break; } } } else { int d[t + 1]; for (int i = 1; i <= t; ++i) { d[i] = block[i] ? -1 : 0; for (int j : adj[i]) { if (d[j] != -1) { d[i] = max(d[i], d[j] + 1); } } } res = d[t]; } cout << res << '\n'; for (int c : blocks) { block[c] = false; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...