제출 #963333

#제출 시각아이디문제언어결과실행 시간메모리
963333TimAniBitaro’s Party (JOI18_bitaro)C++17
14 / 100
2050 ms130124 KiB
//start-time: 2024-04-14 19:39:32 #include <bits/stdc++.h> using namespace std; using ll = long long; const int w = 100; void solve(){ int n, m, q; cin >> n >> m >> q; vector<vector<int>> gR(n); for(int i = 0; i < m; i++){ int u, v; cin >> u >> v; gR[v - 1].push_back(u - 1); } vector<vector<pair<int, int>>> dp(n); for(int u = 0; u < n; u++){ vector<int> val(n), vis(n), cur; for(auto &v : gR[u]){ for(auto &[value, ind] : dp[v]){ if(vis[ind] == u) val[ind] = max(val[ind], value + 1); else vis[ind] = u, val[ind] = value + 1, cur.push_back(ind); } } for(auto v : cur) dp[u].push_back({val[v],v}); dp[u].push_back({0,u}); sort(dp[u].rbegin(), dp[u].rend()); if(dp[u].size()>w) dp[u].erase(dp[u].begin() + w, dp[u].end()); } while(q--){ vector<bool> c(n); int u, y, ans = -1; cin >> u >> y; u--; for(int j = 0; j < y; j++){ int a; cin >> a; c[--a] = 1; } if(y < w) { for(auto &[v, i] : dp[u]){ if(!c[i]){ ans = max(ans, v); } } } else { vector<int> naive(n); for(int v = 0; v <= u; v++){ naive[v] = c[v] ? -1 : 0; for(auto &el : gR[v]){ naive[v] = max(naive[v], naive[el] + (naive[el] != -1)); } } ans = naive[u]; } cout << ans << endl; } } int main() { cin.tie(0)->sync_with_stdio(0); ll T = 1; //cin >> T; while(T--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...