Submission #963212

#TimeUsernameProblemLanguageResultExecution timeMemory
963212TimAniBitaro’s Party (JOI18_bitaro)C++17
0 / 100
20 ms6040 KiB
//start-time: 2024-04-14 19:39:32 #include <bits/stdc++.h> using namespace std; using ll = long long; void solve(){ ll n, m, q; cin >> n >> m >> q; vector<vector<ll>> g(n); vector<vector<ll>> gR(n); for(ll i = 0; i < m; i++){ ll u, v; cin >> u >> v; u--; v--; g[u].push_back(v); gR[v].push_back(u); } vector<ll> vis(n), topo; auto dfs = [&](ll u, auto&&dfs) -> void { vis[u] = 1; for(auto v : g[u]){ if(!vis[v]){ dfs(v, dfs); } } vis[u] = 2; topo.push_back(u); }; for(int i = 0; i < n; i++){ if(vis[i] == 0){ dfs(i, dfs); } } reverse(topo.begin(), topo.end()); vector<set<array<ll, 2>>> dp(n); for(auto el : topo){ dp[el].insert({0, el}); } map<int, map<int, ll>> mp; const ll w = round(sqrt(100'000)) + 1; for(auto u : topo){ for(auto v : gR[u]){ for(auto [v, i] : dp[v]){ ll o = v + 1; if(mp[u][i]) { o = max(o, mp[u][i]); dp[u].erase({mp[u][i], i}); } mp[u][i] = o; dp[u].insert({o, i}); if(dp[u].size() > w){ auto [V, I] = *dp[u].begin(); dp[u].erase(dp[u].begin()); mp[u][I] = 0; } } } } //for(auto ms : dp){ //for(auto [v, i] : ms){ //cout << v << ' ' << i << '\n'; //} //cout << endl; //} // TODO for(ll i = 0; i < q; i++){ ll u, y; cin >> u >> y; u--; set<array<ll, 2>> ms = dp[u]; vector<ll> c(100'000 + 1); for(ll j = 0; j < y; j++){ ll a; cin >> a; c[--a] = 1; } if(y <= w){ ll ans = -1; for(auto [v, i] : ms){ if(!c[i]){ ans = max(ans, v); } } 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...