Submission #1252395

#TimeUsernameProblemLanguageResultExecution timeMemory
1252395MuhammetBitaro’s Party (JOI18_bitaro)C++20
7 / 100
2101 ms142948 KiB
#include "bits/stdc++.h" using namespace std; #define ll long long #define SZ(s) (int)s.size() #define ff first #define ss second const int N = 1e5 + 5; vector <int> v[N], vis, ds; vector <pair <int, int>> V[N]; map <int, bool> mp; int k, ind[N]; void dfs(int x) { if(ds[x] != -(1e9 + 1)) return; ds[x] = (vis[x] ? 0 : -1e9); for(auto i : v[x]) { dfs(i); ds[x] = max(ds[x], ds[i] + 1); } } void f(int x) { if(vis[x]) return; vis[x] = true; priority_queue <pair <pair <int, int>, int>> q; mp.clear(); for(auto i : v[x]) { f(i); q.push({V[i][0], i}); ind[i] = 0; } while(SZ(V[x]) < k and SZ(q)) { auto [d, Y] = (q.top()).ff; int y = (q.top()).ss; q.pop(); if(mp.find(Y) == mp.end()) { V[x].push_back({d+1, Y}); mp[Y] = true; } ind[y]++; while(ind[y] < SZ(V[y]) and mp.find(V[y][ind[y]].ss) != mp.end()) { ind[y]++; } if(ind[y] == SZ(V[y])) continue; q.push({V[y][ind[y]], y}); } V[x].push_back({0, x}); } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, m, q; cin >> n >> m >> q; k = sqrt(n) + 5; for(int i = 1; i <= m; i++) { int u1, u2; cin >> u1 >> u2; v[u2].push_back(u1); } vis.assign(n+1, 0); for(int i = 1; i <= n; i++) { f(i); } vector <int> a; vis.assign(n+1, true); while(q--) { int t, y; cin >> t >> y; a.resize(y); for(int i = 0; i < y; i++) { cin >> a[i]; } for(auto i : a) { vis[i] = false; } if(y > k) { ds.assign(n+1, -(1e9 + 1)); dfs(t); cout << (ds[t] < 0 ? -1 : ds[t]) << '\n'; for(auto i : a) { vis[i] = true; } continue; } int ans = -1; for(auto [i, j] : V[t]) { if(vis[j]) { ans = i; break; } } cout << ans << '\n'; for(auto i : a) { vis[i] = true; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...