Submission #1222100

#TimeUsernameProblemLanguageResultExecution timeMemory
1222100HappyCapybaraBitaro’s Party (JOI18_bitaro)C++20
100 / 100
1501 ms418924 KiB
#include<bits/stdc++.h> using namespace std; int k = 300; signed main(){ cin.tie(0); iostream::sync_with_stdio(false); int n, m, q; cin >> n >> m >> q; vector<vector<int>> g(n), tg(n); for (int i=0; i<m; i++){ int s, e; cin >> s >> e; s--; e--; g[s].push_back(e); tg[e].push_back(s); } vector<vector<pair<int,int>>> dp(n); vector<int> idx(n), flag(n, -1); for (int i=0; i<n; i++){ dp[i].push_back({0, i}); idx[i] = 0; flag[i] = i; for (int next : tg[i]){ for (auto [len, s] : dp[next]){ if (flag[s] < i){ dp[i].push_back({len-1, s}); idx[s] = dp[i].size()-1; flag[s] = i; } else dp[i][idx[s]].first = min(dp[i][idx[s]].first, len-1); } } sort(dp[i].begin(), dp[i].end()); while (dp[i].size() > k) dp[i].pop_back(); } for (int i=0; i<q; i++){ int t, y; cin >> t >> y; t--; unordered_set<int> busy; for (int j=0; j<y; j++){ int x; cin >> x; busy.insert(x-1); } if (y < k){ for (int j=0; j<dp[t].size(); j++){ if (busy.find(dp[t][j].second) == busy.end()){ cout << -dp[t][j].first << '\n'; break; } if (j == dp[t].size()-1){ cout << -1 << '\n'; break; } } } else { int bsf = -1; vector<int> dp2(n, -pow(10, 9)); for (int cur=n-1; cur>=0; cur--){ if (cur == t) dp2[cur] = 0; if (busy.find(cur) == busy.end()) bsf = max(bsf, dp2[cur]); //cout << cur << " " << dp2[cur] << endl; for (int next : tg[cur]) dp2[next] = max(dp2[next], dp2[cur]+1); } cout << bsf << '\n'; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...