Submission #1252362

#TimeUsernameProblemLanguageResultExecution timeMemory
1252362MuhammetBitaro’s Party (JOI18_bitaro)C++20
7 / 100
2101 ms156904 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; 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; set <pair <pair <int, int>, pair <int, int>>> s; set <int> st; for(auto i : v[x]) { f(i); s.insert({V[i][0], {i, 0}}); } while(SZ(V[x]) <= k and SZ(s)) { auto [d, Y] = (*s.rbegin()).ff; auto [y, ind] = (*s.rbegin()).ss; s.erase(--s.end()); if(st.find(Y) == st.end()) { V[x].push_back({d+1, Y}); st.insert(Y); } ind++; if(ind == SZ(V[y])) continue; s.insert({V[y][ind], {y, ind}}); } 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; while(q--) { int t, y; cin >> t >> y; a.resize(y); for(int i = 0; i < y; i++) { cin >> a[i]; } if(y > k) { vis.assign(n+1, true); for(auto i : a) { vis[i] = false; } ds.assign(n+1, -(1e9 + 1)); dfs(t); cout << (ds[t] < 0 ? -1 : ds[t]) << '\n'; continue; } mp.clear(); for(auto i : a) { mp[i] = true; } int ans = -1; for(auto [i, j] : V[t]) { if(mp.find(j) == mp.end()) { ans = i; break; } } cout << ans << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...