Submission #697117

#TimeUsernameProblemLanguageResultExecution timeMemory
697117finn__Bitaro’s Party (JOI18_bitaro)C++17
100 / 100
1999 ms414744 KiB
#include <bits/stdc++.h> using namespace std; vector<vector<unsigned>> g; vector<vector<pair<unsigned, unsigned>>> dp; int main() { ios_base::sync_with_stdio(0); cin.tie(0); size_t n, m, q; cin >> n >> m >> q; g = vector<vector<unsigned>>(n); dp = vector<vector<pair<unsigned, unsigned>>>(n); for (size_t i = 0; i < n; i++) dp[i].emplace_back(0, i); for (size_t i = 0; i < m; i++) { unsigned u, v; cin >> u >> v; g[u - 1].push_back(v - 1); } size_t const s = 316; vector<bool> used(n, 0); for (size_t i = 0; i < n; i++) { for (unsigned const &j : g[i]) { size_t u = 0, v = 0; vector<pair<unsigned, unsigned>> new_dp; while (u < dp[i].size() && v < dp[j].size()) { if (dp[i][u].first + 1 > dp[j][v].first) { new_dp.emplace_back(dp[i][u].first + 1, dp[i][u].second); u++; } else { new_dp.push_back(dp[j][v]); v++; } } while (u < dp[i].size()) new_dp.emplace_back(dp[i][u].first + 1, dp[i][u].second), u++; while (v < dp[j].size()) new_dp.push_back(dp[j][v]), v++; dp[j].clear(); for (size_t k = 0; k < new_dp.size() && dp[j].size() < s; k++) if (!used[new_dp[k].second]) { dp[j].push_back(new_dp[k]); used[new_dp[k].second] = 1; } for (size_t k = 0; k < new_dp.size(); k++) used[new_dp[k].second] = 0; } } vector<bool> blocked(n, 0); while (q--) { unsigned t, y; cin >> t >> y; t--; vector<unsigned> z; for (size_t i = 0; i < y; i++) { unsigned u; cin >> u; blocked[u - 1] = 1; z.push_back(u - 1); } if (y < s) { bool found = 0; for (size_t i = 0; i < dp[t].size(); i++) if (!blocked[dp[t][i].second]) { found = 1; cout << dp[t][i].first << '\n'; break; } if (!found) cout << -1 << '\n'; } else { vector<int> dp2(n, 0); for (size_t i = 0; i < n; i++) if (blocked[i]) dp2[i] = -1; for (size_t i = 0; i < n; i++) if (dp2[i] != -1) for (unsigned const &j : g[i]) dp2[j] = max(dp2[j], dp2[i] + 1); cout << dp2[t] << '\n'; } for (unsigned const &u : z) blocked[u] = 0; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...