Submission #853887

#TimeUsernameProblemLanguageResultExecution timeMemory
853887overwatch9Bitaro’s Party (JOI18_bitaro)C++17
0 / 100
2 ms6236 KiB
#include <iostream> #include <vector> #include <algorithm> #include <queue> using namespace std; const int maxn = 1e5 + 1; vector <int> adj[maxn], adjr[maxn]; int outdeg[maxn], processed[maxn]; bool blocked[maxn]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, m, q; cin >> n >> m >> q; for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; adj[a].push_back(b); adjr[b].push_back(a); outdeg[a]++; } while (q--) { int t, y; cin >> t >> y; fill(blocked, blocked + n + 1, false); fill(processed, processed + n + 1, false); int outdeg_cpy[maxn]; for (int i = 0; i <= n; i++) outdeg_cpy[i] = outdeg[i]; for (int i = 0; i < y; i++) { int x; cin >> x; blocked[x] = true; } int ans = -1; priority_queue <pair <int, int>> pq; pq.push({0, t}); vector <int> dis(n+1, -1); dis[t] = 0; while (!pq.empty()) { int a = pq.top().second; pq.pop(); if (processed[a]) continue; processed[a] = true; if (!blocked[a]) ans = max(ans, dis[a]); for (auto i : adjr[a]) { outdeg_cpy[i]--; pq.push({-outdeg_cpy[i], i}); dis[i] = dis[a] + 1; if (!blocked[i]) ans = max(ans, dis[i]); } } cout << ans << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...