Submission #908665

#TimeUsernameProblemLanguageResultExecution timeMemory
908665mickey080929Bitaro’s Party (JOI18_bitaro)C++17
14 / 100
501 ms243024 KiB
#include <bits/stdc++.h> using namespace std; const int B = 300; int dp[100010][B+1]; int st[100010][B+1]; vector<int> adj[100010]; int idx[100010]; int chk[100010]; int dp2[100010]; int main() { int n, m, q; cin >> n >> m >> q; for (int i=0; i<m; i++) { int u, v; cin >> u >> v; adj[v].push_back(u); } memset(dp, -1, sizeof(dp)); for (int i=1; i<=n; i++) { for (auto &j : adj[i]) { idx[j] = 0; } for (int j=0; j<B; j++) { int mx = -1, pv = -1; for (auto &k : adj[i]) { if (mx < dp[k][idx[k]]) { mx = dp[k][idx[k]]; pv = k; } } if (pv == -1) break; dp[i][j] = mx + 1; st[i][j] = st[pv][idx[pv]]; idx[pv] ++; } for (int j=0; j<B; j++) { if (dp[i][j] == -1) { dp[i][j] = 0; st[i][j] = i; break; } } } while (q --) { int x; cin >> x; int k; cin >> k; vector<int> num(k); for (int i=0; i<k; i++) { cin >> num[i]; chk[num[i]] = 1; } if (k < B) { for (int i=0; i<B; i++) { if (dp[x][i] == -1) { cout << "-1\n"; break; } if (!chk[st[x][i]]) { cout << dp[x][i] << '\n'; break; } } } else { for (int i=1; i<=x; i++) { if (!chk[i]) dp2[i] = 0; else dp2[i] = -1; for (auto &j : adj[i]) { if (dp2[j] != -1) dp2[i] = max(dp2[i], dp2[j] + 1); } } cout << dp2[x] << '\n'; } for (int i=0; i<k; i++) { chk[num[i]] = 0; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...